以下解决php bug#53632的任何问题

时间:2011-01-06 00:23:45

标签: php

我需要快速修复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);
}

3 个答案:

答案 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