用戶可以操縱php_sapi_name()返回的值嗎?PHP:php_sapi_name()是否安全(用戶可以操作它)?
我有一個腳本,看起來像這樣:(!)
if(php_sapi_name() !== "cli"){
die("NoAccess");
}
// Do some admin stuff
這個腳本只能通過從命令行調用。上面的代碼安全嗎?或者有人可以通過HTTP調用腳本並在if條件之外執行它?
用戶可以操縱php_sapi_name()返回的值嗎?PHP:php_sapi_name()是否安全(用戶可以操作它)?
我有一個腳本,看起來像這樣:(!)
if(php_sapi_name() !== "cli"){
die("NoAccess");
}
// Do some admin stuff
這個腳本只能通過從命令行調用。上面的代碼安全嗎?或者有人可以通過HTTP調用腳本並在if條件之外執行它?
php_sapi_name()
的返回值是安全依賴的。它不是從用戶數據生成的。
如果你不想讓它從你的web服務器被調用,你不應該讓你的web服務器可以訪問這個腳本。如果你關心安全,這個腳本根本無法訪問。
你也提到了.htaccess
......不要使用它,在其他地方使用適當的配置文件。必須爲每個請求加載和解析.htaccess
,這是不高效的。
和函數的來源:https://github.com/php/php-src/blob/fa45f64bd87b62f655e6d99c1a088efa5772b5fe/ext/standard/info.c#L1326 –
如果沒有人應該直接通過HTTP訪問該腳本,那麼您應該將其放在http根文件夾之外。 – LorenzSchaef
我知道這是最好的做法,但在這種情況下,這是不可能的。我將通過.htaccess拒絕訪問,但即使.htaccess失敗,我也希望100%安全,這就是爲什麼我要將代碼放在那裏的原因。 – Tream