2011-01-06 5 views
0

私は私のサーバーの中には32ビットであり、様々なクライアントのPHPが含まれているphp bug #53632すべての問題53632

に関する私のサーバーをダウンさせる攻撃を防ぐために、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

+0

それはすでに修正済みだと言います。だから、パッチよりもアップグレードするほうがいいですか? –

答えて

1

これは、REQUEST変数隠蔽が行われていないという事実に依存しています。

index.php?var = 2.22507 ...に投稿し、varという名前のPOST変数を指定する悪意のあるリクエストは、REQUEST配列内に1つだけ表示されます。このフィルタをバイパスするには、最大2回、最小1回のリクエストが必要です。

 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のようなスクリプトを終了します。

関連する問題