2013-08-28 4 views
0

XSS 공격을 방지하는 가장 좋은 방법은 무엇입니까? 여기에 내가하려고하는 코드가있다.XSS를 방지하는 더 좋은 방법은 무엇입니까?

이 코드 줄은 XSS 공격을 막기에 충분한 코드입니까? 또는 'strip_tags'로 각 요소를 구문 분석해야합니까? 어떤 제안이있어 주셔서 감사합니다.

$xss = array_map('strip_tags', $_POST); 

또는 내가 'strip_tags'로 폼 요소를 많이 변경해야 할이 방법

.

$f_name = strip_tags($_POST["f-name"]); 
$a_id = isset($_POST['a_id']) ? (int)strip_tags($secure_POST['a_id']) : 0; 

$qry = $pdo_conn->prepare('INSERT INTO TABLE1(id, f_name) VALUES (?, ?)'); 
$qry->execute(array($a_id, $f_name)); 
+0

[PDOStatement :: bindParam] (http://php.net/pdostatement.bindparam)을 사용하여 매개 변수를 특정 데이터 유형에 바인딩하고 많은 strip_tags 및 캐스팅을 저장하지 않아도됩니다. – cmbuckley

+2

XSS에 대해 읽으려면 하루가 걸리므로 실제로 * * 무엇인지 이해할 수 있습니다. –

답변

2

XSS은 Cross Site Scripting 수단 악성 HTML 요소와 웹 사이트를 주입한다. 이것은 표시 할 때 utf8과 같은 적절한 문자 집합과 htmlentities를 설정하여 예방할 수 있습니다.

경우에 따라 데이터베이스에 원본 데이터를 보관하려고합니다. 안티 XSS 전술을 바꾸려면 데이터가 아직 준비되지 않았기 때문에 한꺼번에 처리 할 수 ​​있습니다.

나는 반대로 sql-injection을 의미한다고 생각합니다. 준비된 문장은 스스로 (utf8과 같은 적절한 charset을 정의한다면) 걱정할 필요가 없습니다. $ _POST [ 'int']가 실제로 int 값만 가지고 있는지 (예 :) 확인하는 것과 같이 미리 검사 할 수 있습니다.

+0

내 HTML 페이지에서 다음 태그를 사용하고 있습니다. 또한 PHP.ini 파일의 기본 문자셋은 utf-8입니다. – nav100

+0

연결에 대한 문자 세트를 설정할 수도 있습니다. :) – Martijn

1

XSS가 데이터를 인쇄하는 동안 XSS가 발생하므로 자세한 내용은 OWASP - XSS (Cross Site Scripting) Prevention Cheat Sheet을 참조하십시오. XSS를 방지하는 가장 좋은 방법은 출력 중에 데이터를 인코딩하고 위생 처리하는 것입니다.

준비된 구문을 사용하면 SQL 주입 공격은 방지되지만 XSS는 수행하지 않으므로 사용자 데이터를 항상 신뢰할 수없는 것으로 간주해야하므로 사용자가 데이터를 입력하도록 허용하면 두 공격을 모두 고려해야합니다.

관련 문제