PHP安全-會話注入

黄舟
發布: 2023-03-05 20:46:02
原創
1068 人瀏覽過



會話注入

  一個與​​會話暴露類似的問題是會話注入。這類攻擊是基於你的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>
登入後複製


腳本表 腳本表

 <?php
 
  session_start();
 
  $path = ini_get(&#39;session.save_path&#39;);
 
  foreach ($_POST as $sess_name =>
$sess_data)
  {
    $_SESSION = $sess_data;
    $sess_data = session_encode;
 
    file_put_contents("$path/$sess_name",
$sess_data);
  }
 
  $_SESSION = array();
 
  ?>
登入後複製

 

  此類攻擊非常危險。攻擊者不僅可以編輯你的使用者的數據,還可以編輯他自己的會話數據。它比會話劫持更為強大,因為攻擊者能選擇所有的會話資料進行修改,從而使繞過存取限制和其他安全手段成為可能。

  針對這個問題的最佳解決方案是將會話資料保存在資料庫中。參見前節所示。

 以上就是PHP安全-會話注入的內容,更多相關內容請關注PHP中文網(www.php.cn)!



相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!