在我的网站被 LFI、RFI 和 DTA 攻击后,我正在尝试实现一个安全的 php 获取页面功能(我得到了整个包 LOL)。
浏览网页我发现这个脚本似乎可以很好地防止包含我以前未验证的文件
<?$page = (!empty($_GET['page'])) ? $_GET['page'] : 'home.php';?>
<?// pick a page
switch ($page) {
case 'home.php': include($page); break;
case 'folder/page1.php': include($page); break;
case 'folder/folder/page2.php': include($page); break;
// don't accept any other values
default: /* error 404 for example */ unset($_GET['page'], $page); $a = false; break;
}?>
<?if(!$a){
}?>
<?
if(!isset($page)) {
$a = true;
$page = 'home.php';
} ?>
关于目录遍历,我在 Stackoverflow 上找到了这个 OLD 讨论
帕特里克摩尔建议清理这些脚本以防止目录遍历
$_GET['page'] = str_replace( array('..', '/', '\' ), '', $_GET['page'] );
但是,我怀疑我可以使用 Patrick Moore 建议的脚本,因为我必须包含的几个页面都包含在子文件夹中(参见上面的示例脚本),所以我认为我不能清理“/”,而不是如果我只使用 str_replace'..'
和'\'
.
鉴于我的网站的文件夹结构,任何关于如何清理传递值的建议都将受到欢迎。