我需要快速修复php以防止攻击我的服务器php bug #53632
我的一些服务器是32位,包含各种客户端PHP脚本。
理想情况下,我会将PHP修补到最新版本,但同时我认为使用php.ini auto_prepend_file指令自动包含修复程序会花一些时间。你能看到这个临时修复有什么问题吗?
所以我编辑了我的php.ini文件并添加:
auto_prepend_file = c:\wamp\www\php-53632-fix.php
代码:
<?php
if ($_REQUEST)
{
foreach ($_REQUEST as $fixKey => $fixValue)
{
if (strstr(str_replace('.','',$fixValue),'22250738585072011'))
{
unset($_REQUEST[$fixKey]);
unset($_COOKIE[$fixKey]);
unset($_POST[$fixKey]);
unset($_GET[$fixKey]);
$GLOBALS[$fixKey]="";
}
}
reset($_REQUEST);
unset($fixKey);
unset($fixValue);
}
if ($_SERVER)
{
foreach ($_SERVER as $fixKey => $fixValue)
{
if (strstr(str_replace('.','',$fixValue),'22250738585072011'))
{
unset($_SERVER[$fixKey]);
$GLOBALS[$fixKey]="";
}
}
reset($_SERVER);
unset($fixKey);
unset($fixValue);
}
答案 0 :(得分:3)
为什么要继续明显的恶意请求呢?我只是终止像here这样的脚本。
答案 1 :(得分:1)
这取决于没有发生REQUEST变量隐藏的事实。
恶意请求发布到index.php?var = 2.22507 ...并提供一个名为var的POST变量,只有一个会出现在REQUEST数组中。它最多需要两个,并且至少需要一个请求才能绕过此过滤器。
GET[var] POST[var] REQUEST[var]
req1 test 2.225.. test
req2 2.225.. test 2.225..
根据服务器配置,将导致请求未被检测到。这也可以通过其他组合来完成,即GET / COOKIE,POST / COOKIE等,你就明白了。
应单独检查每个阵列。事实上,你甚至可以不检查REQUEST,它是一个聚合。它的开销略高,但如果你不能保证你的代码中没有直接使用$ _GET,$ _POST或$ _COOKIE,那就更安全了。
答案 2 :(得分:0)
我同意,只要遇到其中一个错误的值就杀掉脚本。
有关我们最新的解决方法,请参阅http://www.aircraft24.com/en/info/php-float-dos-quickfix.htm。