我有问题。我有一个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_exists
函数来验证文件物理存在。
非常感谢! <3 – askerno
作为一个方面说明,这并不真正检查文件名是否为“有效”。它只是简单地删除最后一个PHP目录分隔符。我明白OP的意图是要做到这一点。但其他人可能会认为这证实了一些事情 - 事实并非如此。 –
会这样吗? http://php.net/manual/en/function.file-exists.php E.g,你的情况,
if(file_exists(str_replace("../", "", $file))){
// valid
}
else{
// invalid
}
文件可以在子文件夹,但不是在父文件夹。
但是,如果你在文件名有兴趣,
if(file_exists(pathinfo($file, PATHINFO_BASENAME))){
// valid
}
else{
// invalid
}
应该工作。
之前的所有内容即可正常工作,但我认为kamal pal的版本更加紧凑,我不想转到子文件夹..但是也要感谢您<3 – askerno
我会想结合卡迈勒朋友的和Pancake_M0nster的回答创建简单:
if(file_exists(basename($file))){
// valid
}
else{
// invalid
}
结合两种不同的解决方案并不总是提供更好或更有效的答案。有时候,它甚至会破坏功能:在这种情况下,只有'$ file'与主脚本位于同一目录时,结果才会是“真”。 –
- 1. 检查字符串是否有效
- 2. 检查文件名是否有效
- 3. 检查UTF16字符串中的所有字符是否有效?
- 4. 检查字符串是否有有效的数字
- 5. 检查字符串是否有数字
- 6. 检查替换字符串是有效
- 7. Laravel检查字符串是否是有效的时间戳字符串
- 8. 如何检查查询字符串中的ID是否有效?
- 9. 如何检查是否字符串是有效的HTML格式
- 10. 检查字符串是否是语法有效的句子?
- 11. 如何检查字符串是否是有效的HTTP URL?
- 12. 检查一个字符串是否是一个有效的URI
- 13. Java的检查,如果字符串是有效的文件
- 14. 函数检查字符串是否有
- 15. 如何检查是否字符串有
- 16. 检查数组是否有字符串?
- 17. 检查字符串是否有空格
- 18. 检查字符串是否为回文
- 19. 检查文件名是否有效窗口名称
- 20. 有效检查一个字符串是否包含另一个字符串
- 21. 检查一个txt文件中是否有新字符串
- 22. 检查字符值是否为有效的R对象名称
- 23. 检查Localizable.strings文件是否有效
- 24. 如何检查字符串是否有效YAML?
- 25. 检查javascript字符串是否有效UTF-8
- 26. Jsoup检查字符串是否有效HTML
- 27. 检查字符串是否包含有效的Python代码
- 28. 如何检查给定的字符串是否有效月份?
- 29. 如何检查json字符串是否有效?
- 30. 检查JSONPath字符串是否在C#中有效
您是否尝试过的东西?或写了一些伪代码?或做了一些研究? – Rizier123
只需删除'/' – adeneo