-1

基本上,我想创建一个站点来向人们展示如何通过模拟 PHP 漏洞来防止它们。但是,我无法让他们自己工作。

我想查看一个变量是否等于一个有效页面(我只有两个用于测试),如果是,则加载该页面。否则,我看看它是否包含“../”。如果这些都不是真的,它只是说“找不到页面”。

到目前为止,这是我的代码:

<?php
if($page=="LOLone.php" || $page=="LOLtwo.php"){
echo "Welcome, look at the LOL cats!";
include($page);
}else if(strlen(strstr($page,"../"))>0){
echo "Congrats, you found the transversal attack vulnerability!";
}else{
echo "Page not found!";
}
?>

每当我尝试使用page=LOLone.phpLOLtwo.php或什至../)时,它都会显示“找不到页面!” 我不能像现在这样比较变量吗,或者这可能是我的网络主机安全吗?我有点困惑,但我对 PHP 比较陌生,所以我觉得我错过了一些简单的东西......

好吧,我犯了一个简单的错误。也是一个很大的。对不起。感谢所有回复,我会非常小心我自己的服务器被黑客入侵。在这个例子中,我应该是干净的,因为只有当它等于指定值时,我才让它包含页面。再次感谢。

4

2 回答 2

1

尝试

$webPath = "/home/www/somesite/userpages" ;
$pages = array(
"page1.php",
"page2.php"     
);


//http://testing.com?page=xxx
$_GET['page'] = "../../etc/passwd" ; //Sample Hack


//Prepare Include 

$page = realpath($_GET['page']);
$dirName = dirname($page);
$baseName = basename($page) . ".php";


if($dirName != $webPath)
{
    die("Die! Die! Die!");
}

if(!in_array($baseName, $pages))
{
    die("Kill! Kill! Kill!");
}

echo "Welcome" ;
于 2012-04-22T20:13:15.147 回答
0

代替

if(strlen(strstr($page,"../"))>0)

if( strpos($page, '../') !=== false )

现在,您正在检查strstr()通话的长度,这不是正确的方法。现在它改为检查../- 如果它不是假的 - 我们确定字符串有它的位置。

但是,您可能应该从另一个更简单的项目开始 - 因为一个只会确保您的服务器由于您忘记停止的漏洞而被黑客入侵。

于 2012-04-22T20:14:45.740 回答