2011-01-06 38 views
0

我需要速戰速決,爲PHP來防止攻擊我與服務器取下來到php bug #53632與下面的解決了PHP錯誤#任何問題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

相關:http://stackoverflow.com/questions/4605590/php-float-bug-php-hangs-on-numeric-value/4606026#4606026 – marcog 2011-01-06 00:28:09

+0

它說它已經被修復了。那麼,升級比補丁更好? – 2011-01-07 09:27:05

回答

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,它會更安全。

3

你爲什麼要不惜一切繼續明顯maliscious要求?我只需要終止腳本,如here