作者tas72732002 (蔥頭)
看板PHP
標題[請益] 關於使用crontab 安全性問題
時間Fri May 2 16:08:52 2014
請問一下, 假設要避免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://webptt.com/m.aspx?n=bbs/PHP/M.1399018134.A.F2D.html
1F:→ MOONRAKER:crontab在你的server上執行 怎麼會由外部來執行 05/02 16:18
2F:→ danny8376:如果你的PHP是直接跑的 直接放在網頁目錄外最簡單 05/02 16:22
3F:→ tas72732002:假設程式放在web service下~ 就有可能~ 05/02 16:23
4F:→ tas72732002:看來用command line應該用抓不到ip了 05/02 16:32
5F:→ MOONRAKER:是阿放到網頁以外不就結了 如果抓到IP就趕快停止執行 05/02 17:06
6F:→ tas72732002:後來想了一下~ 只要判斷取得的ip是不是空的就可以了~ 05/02 22:51
7F:→ tas72732002:用HTTP取得的ip一定會有值,command line則不會 05/02 22:51
8F:→ danny8376:不過說真的 設deny也沒很難 05/03 01:59
9F:→ tas72732002:也是啦 05/03 08:14
10F:→ iceblue7x:if (php_sapi_name() != 'cli') { exit; } 05/03 09:33
11F:→ alog:不用這麼麻煩.. 05/03 13:44
12F:→ alog:你用在 Send Http Request 的時候 User Agent 用特別的字串 05/03 13:44
13F:→ alog:而程式那端只接受特定 User Agent 來往就可以了 05/03 13:45
14F:→ alog:驗證的話:'WORKER/2.0' == $_SERVER['HTTP_USER_AGENT'] 05/03 13:47
15F:→ alog:基本上安全很多了,因為 User Agent 要被撞到是很困難的事 05/03 13:48
16F:→ alog:如果不是內部人自己知道的話,沒人知道你的腳本只接受哪個 UA 05/03 13:48
17F:→ alog:如果 UA 不是正確的,則就輸出 404 或 忽略所有動作 05/03 13:51
18F:→ danny8376:回樓上 他應該是用 php this_is_cron_job.php 05/03 16:41
19F:→ danny8376:這種方式跑的 05/03 16:42