2017-01-09 68 views
3

用戶可以操縱php_sapi_name()返回的值嗎?PHP:php_sapi_name()是否安全(用戶可以操作它)?

我有一個腳本,看起來像這樣:(!)

if(php_sapi_name() !== "cli"){ 
    die("NoAccess"); 
} 

// Do some admin stuff 

這個腳本只能通過從命令行調用。上面的代碼安全嗎?或者有人可以通過HTTP調用腳本並在if條件之外執行它?

+0

如果沒有人應該直接通過HTTP訪問該腳本,那麼您應該將其放在http根文件夾之外。 – LorenzSchaef

+0

我知道這是最好的做法,但在這種情況下,這是不可能的。我將通過.htaccess拒絕訪問,但即使.htaccess失敗,我也希望100%安全,這就是爲什麼我要將代碼放在那裏的原因。 – Tream

回答

3

php_sapi_name()的返回值是安全依賴的。它不是從用戶數據生成的。

如果你不想讓它從你的web服務器被調用,你不應該讓你的web服務器可以訪問這個腳本。如果你關心安全,這個腳本根本無法訪問。

你也提到了.htaccess ......不要使用它,在其他地方使用適當的配置文件。必須爲每個請求加載和解析.htaccess,這是不高效的。

+1

和函數的來源:https://github.com/php/php-src/blob/fa45f64bd87b62f655e6d99c1a088efa5772b5fe/ext/standard/info.c#L1326 –

相關問題