发送带有表单提交的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);
?>
解决方法:
您可能需要查看realpath().
$foo = realpath($foo);
if (substr($foo, 0, 8) != '/my/path') {
return false;
}
…或类似的东西.
标签:scandir,security,php 来源: https://codeday.me/bug/20191210/2102742.html