2011-02-05 2 views
1

가능한 중복 : 예를 들어
What are the best practices for avoid xss attacks in a PHP site쿼리 문자열에 <script> 요소가있는 XSS 공격을 방지하려면 어떻게합니까?

:

http://www.mid-day.com/searchresult.php?query=%3Cscript%3Ealert%28%22This%20is%20vulnerable%20for%20XSS%20..%20by%20binny%22%29%3C/script%3E 

이 웹 사이트는 어떻게 방지하기 위해 XSS의 DOM을 기반으로 나는이 취약점의 원인은 무엇인지 알고 싶어 취약점과이있다 그것?

+0

더 많은 중복이 가능합니다. http://stackoverflow.com/search?q=xss+php – Gordon

+1

사이드 노트에서 관련 코드 부분을 질문에 입력하면 특정 사이트에 대한 답변을 얻을 수 있습니다 (또는 코드 패드 또는 페이스트 빈)를 사용하는 대신 사람들이 짧은 링크를 따라 가면 신을 알 수 있습니다. – Gordon

답변

3

출력하기 전에 쿼리 문자열 매개 변수와 같이 사용자가 제공 한 값을 항상 HTML로 인코딩해야합니다. htmlentities 기능을 사용할 수 있습니다.

$str = $_GET['a']; 
echo $str; 

사용 : 대신

$str = $_GET['a']; 
echo htmlentities($str); 
1

당신은 HTML Purifier 갈 수

HTML 정수기는 PHP로 작성된 표준을 준수하는 HTML 필터 라이브러리입니다. HTML 정수기 만, 그것은 또한 문서가 표준 준수 확인하는 철저하게 감사,
보안 아직 허용 허용 된 사이트 목록으로 만 달성 뭔가를 (더 나은 XSS라고도 함) 모든 악성 코드를 제거하지 않습니다 포괄적 인 W3C의 사양에 대한 지식

내장 된 PHP 함수는 모든 종류의 공격에 응답하지 않기 때문에 그러한 오픈 소스 솔루션이 필요한 이유입니다.

나는 또한 당신이 한 번 봐 걸릴 제안 :

3

당신은 에코해서는 안 직접 무엇을 $ _REQUEST, $ _POST, $ _GET, 또는 $ _SERVER 변수에 . 이 같은 경우

는 :

index.php?text=hai

을하고 말 : 그것은 안전하지

echo $_GET['text']

. 당신이 거기에 스크립트를 넣어 또는 어떤 경우 :

index.php?text=<script>alert(document.cookie);</script>

그것은 문서 쿠키를 표시합니다. 진짜 안전하지 않아.

무언가를 제출할 때도 $ _REQUEST와 $ _POST가 동일합니다. 그리고 $ _SERVER [ 'THIS_URI'] ...

index.php?url=<script><!-- something --></script>

하고 다음

<form action="<?php echo $_SERVER['THIS_URI']; ?>">

을 당신은 XSS도 해킹 얻을.

항상 htmlentities($string)을 사용하고 MySQL 검색어 mysql_real_escape_string($string)을 사용합니다.

인사말.

관련 문제