7

友人がウェブサイトのモジュールを完成させるのを手伝っています。彼のモジュールを見た第一印象から、非常に危険なものがいくつかありましたが、彼はこの方法は安全だと言っています。

コードの一部:

session_start();

  if(isset($_POST['foo'])) 
  {
    $_SESSION['foo'] = $_POST['foo'];
  }

  if(isset($_SESSION['foo']))
  {
    $foo['foo']  = $_SESSION['foo'];
  }

  if(is_file("inc/". $foo['foo'] . "/bar.php")) {
    // code
  }
  else {
    // code
  }

注 : ファイル (inc/test/bar.php) が存在します。

彼のコードをテストしたかったので、次のリクエストを送信しました。

POST :: foo => test/bar.php%00

POST :: foo => test/bar.php\0

curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=test/bar.php' . chr(0x00));

しかし、これらの方法はどれも機能しませんでした。そのコードは本当に安全ですか? また、誰かがヌルバイトを送信してセキュリティをバイパスするにはどうすればよいでしょうか。友人のコードが安全でないことを友人に証明したい.

4

2 に答える 2

-2

Php は Null バイトに対して非常に脆弱です....php は c 上に構築されているためです。ca では、ヌルバイトは文字列の終わりを意味します。

使用するすべての文字列で Null バイトを削除する必要があります。これは、include en move_uploaded_file などの IO ベースの関数ではさらに重要です。

(int)"1\01" でも int 1 にキャストされるので脆弱

Null バイトを処理できる PHP 関数は、たとえば

str_replace strpos strlen

データベースクエリでも。Mysql は、char、varchar、および text 列の Null バイトに対して脆弱です

于 2013-05-17T17:26:57.763 に答える