我試圖找到一種安全的方式來做到以下幾點:的PHP文件系統函數發送變量表單提交
- 用戶輸入值轉換成HTML格式。
- 表單已提交。
- PHP使用提交的值作爲「scandir」函數的參數。
我的理論是在php腳本中包含邏輯,該腳本禁止絕對路徑,並要求目錄名稱包含一定的值。
我擔心的是黑客可以使用我的表單提交自己的價值並訪問敏感文件。
這是一個JQuery插件。我不希望用戶必須修改PHP文件。
下面的代碼如何被黑客攻擊?
<?php
$foo = $_POST["some_directory"];
//validate $foo
//make sure path to directory is relative
$foo_url_test = parse_url($foo);
if (isset($foo_url_test['scheme']) || isset($foo_url_test['host'])) {
$foo = NULL;
}
//make sure the directory name contains 'bar123'
$foo_name_test = preg_split('_[\\\\/]_', $foo);
$foo_name_test = end($foo_name_test);
$foo_name_test = strpos($foo_name_test,'bar123');
if ($foo_name_test === false) {
$foo = NULL;
}
//make sure the path does not contain '..'
$foo_dot_dot_test = strpos($foo,'..');
if ($foo_dot_dot_test == TRUE || $foo_dot_dot_test === 0) {
$foo = NULL;
}
//get files
$files_array = scandir($foo);
?>
順便說一句,總是用'==='測試strpos()返回'false'! – deceze 2009-07-01 02:17:24