我的网络应用程序中有以下代码:
Process
我收到了几行:
OpenProcess
攻击者是否可以绕过它以在我的系统上利用RFI?或者只是LFI?
答案 0 :(得分:1)
您必须清理用户输入!即使他们只能访问PDF文件,您仍然无法确保他们只获取位于您指定的目录中的文件。
考虑输入../../../siteB/dir/files/secure
。使用您当前的代码而不是访问/var/www/siteA/dir/files/secure.pdf
,他们正在访问/var/www/siteB/dir/files/secure.pdf
。
一种帮助它的方法是只获取输入字符串的最后一位(没有任何前导路径部分)。
$file = basename($_GET['f']);
这会将../../../siteB/dir/files/secure
转换为secure
。这显然只是部分解决方案。其他测试,例如输入空白字符串或您认为无效的字符。
答案 1 :(得分:0)
在同一目录中:
test.php
<?
if(file_exists($page)){
echo("Sorry the local page is protected");
}else{
include($page);
}?>
file.txt
Hello Word
输入: http://www.example.com/test.php?page=file.txt 结果: 抱歉,本地页面受到保护
输入: http://www.example.com/test.php?page=./foo/../file.txt 结果: 你好字
函数file_exists()被绕过