我有个问题.我有一个PHP脚本(PHP 5),它将URL参数保存$_GET['file']到变量中$file.现在有办法检查此变量是否是有效的文件名(例如:hello.txt而不是/../otherdir/secret.txt).因为没有检查$ file变量,黑客就可以使用它/../来获取我的父文件夹.
您可以查看php的basename函数,它将返回文件名,请参见下面的示例:
$file = '../../abc.txt';
echo basename($file); //output: abc.txt
注意:   basename从路径字符串获取文件名,而不管文件是否存在.file_existsfunction可用于验证文件是否物理存在.
POSIX“完全可移植的文件名”列出了这些:A-Z a-z 0-9 . _ -
使用此代码使用正则表达式根据 POSIX 规则验证文件名:
/- 正斜杠(如果您需要验证路径而不是文件名)\w- 相当于[0-9a-zA-Z_]- .  - 点划线空间$filename = '../../test.jpg';
if (preg_match('/^[\/\w\-. ]+$/', $filename)) 
    echo 'VALID FILENAME'; 
else 
    echo 'INVALID FILENAME';
如果您想确保它没有路径(没有正斜杠),请将正则表达式更改为'/^[\w\-. ]+$/'.
| 归档时间: | 
 | 
| 查看次数: | 6627 次 | 
| 最近记录: |