我正在帮助我的朋友完成他的网站模块。从我看他的模块的第一印象,我发现了一些非常危险的东西,但他说这种方法是安全的。
部分代码:
session_start();
if(isset($_POST['foo']))
{
$_SESSION['foo'] = $_POST['foo'];
}
if(isset($_SESSION['foo']))
{
$foo['foo'] = $_SESSION['foo'];
}
if(is_file("inc/". $foo['foo'] . "/bar.php")) {
// code
}
else {
// code
}
注意:文件(inc/test/bar.php)存在;
我想测试他的代码,我发送了以下请求:
POST :: foo => test/bar.php%00
POST :: foo => test/bar.php\0
curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=test/bar.php' . chr(0x00));
但是这些方法都没有奏效。那个代码真的安全吗?以及如何发送一个空字节来绕过它的安全性。我想向我的朋友证明他的代码不安全。