1 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
首先,永遠(yuǎn)不要讓用戶能夠控制直接影響您的代碼的輸入。這種代碼和用戶提供的數(shù)據(jù)的混為一談?wù)菍?dǎo)致代碼不安全的原因。
與其讓用戶決定你的 PHP 應(yīng)該在哪個(gè)目錄中查找,不如讓 PHP 決定它應(yīng)該在哪個(gè)目錄中查找。
代替:
scandir($_GET['dir'], SCANDIR_SORT_ASCENDING);
做這個(gè):
const PICTURES_DIR = '/path/to/pictures/';
scandir(PICTURES_DIR, SCANDIR_SORT_ASCENDING);
如果您必須讓用戶提供輸入的某些部分,那么您至少可以使用白名單方法,而不是僅僅將整個(gè)代碼開(kāi)放給各種漏洞。
$whiteList = ['/path1/', '/path2/', ...];
if (in_array($_GET['path'], $whiteList)) { // It's OK
} else { // Ohnoes :(
}
現(xiàn)在,PHP 有一個(gè)稱為open_basedir限制的東西,它可以防止 PHP 超出某個(gè)基本目錄,但實(shí)際上,如果您發(fā)現(xiàn)自己這樣做只是為了懶得允許任意用戶輸入來(lái)控制您已經(jīng)設(shè)置的代碼自己失敗。
安全性是分層構(gòu)建的。這不是一顆銀彈。
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)