看板 PHP 關於我們 聯絡資訊
請問一下, 假設要避免crontab被別人透過http執行, 我目前想到 1. web service(nginx) 阻擋存取權限 2. os 設定檔案執行權限 但以上兩個都覺得有點麻煩, 想請問可否用程式方式來阻擋,例如ip?? 以下是我用來抓取ip的function if(!empty($_SERVER['HTTP_CLIENT_IP'])) $myip=$_SERVER['HTTP_CLIENT_IP']; else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $myip=$_SERVER['HTTP_X_FORWARDED_FOR']; else $myip=$_SERVER['REMOTE_ADDR']; return $myip; 但實際透過crontab run之後, 發現ip是null的?? 有人知道為什麼嗎?? -- 感謝大家的推文 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.69.59.91 ※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1399018134.A.F2D.html
MOONRAKER:crontab在你的server上執行 怎麼會由外部來執行 05/02 16:18
danny8376:如果你的PHP是直接跑的 直接放在網頁目錄外最簡單 05/02 16:22
tas72732002:假設程式放在web service下~ 就有可能~ 05/02 16:23
tas72732002:看來用command line應該用抓不到ip了 05/02 16:32
MOONRAKER:是阿放到網頁以外不就結了 如果抓到IP就趕快停止執行 05/02 17:06
tas72732002:後來想了一下~ 只要判斷取得的ip是不是空的就可以了~ 05/02 22:51
tas72732002:用HTTP取得的ip一定會有值,command line則不會 05/02 22:51
danny8376:不過說真的 設deny也沒很難 05/03 01:59
tas72732002:也是啦 05/03 08:14
iceblue7x:if (php_sapi_name() != 'cli') { exit; } 05/03 09:33
alog:不用這麼麻煩.. 05/03 13:44
alog:你用在 Send Http Request 的時候 User Agent 用特別的字串 05/03 13:44
alog:而程式那端只接受特定 User Agent 來往就可以了 05/03 13:45
alog:驗證的話:'WORKER/2.0' == $_SERVER['HTTP_USER_AGENT'] 05/03 13:47
alog:基本上安全很多了,因為 User Agent 要被撞到是很困難的事 05/03 13:48
alog:如果不是內部人自己知道的話,沒人知道你的腳本只接受哪個 UA 05/03 13:48
alog:如果 UA 不是正確的,則就輸出 404 或 忽略所有動作 05/03 13:51
danny8376:回樓上 他應該是用 php this_is_cron_job.php 05/03 16:41
danny8376:這種方式跑的 05/03 16:42