HTML / PHP로 XSS를 방지하는 방법?
PHPHTML / PHP로 XSS를 방지하는 방법?
HTML 및 PHP 만 사용하여 XSS (교차 사이트 스크립팅)를 방지하려면 어떻게합니까?
이 주제에 대한 다른 많은 게시물을 보았지만 실제로 XSS를 방지하는 방법을 명확하고 간결하게 명시한 기사를 찾지 못했습니다.
해결법
-
==============================
1.
기본적으로 htmlspecialchars () 함수는 사용자 입력에서 나온 브라우저에 출력 할 때마다 사용해야합니다.
이 함수를 사용하는 올바른 방법은 다음과 같습니다.
echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
Google Code University에는 웹 보안에 대한 다음과 같은 매우 교육적인 비디오가 있습니다.
-
==============================
2.
내가 좋아하는 OWASP 참조 중 하나는 Cross-Site Scripting 설명이다. 왜냐하면 많은 수의 XSS 공격 벡터가 있지만 몇 가지 규칙 중 대다수를 대단히 방어 할 수 있기 때문이다.
이것은 PHP 보안 속임수 시트입니다
-
==============================
3.
가장 중요한 단계 중 하나는 사용자 입력이 처리되거나 브라우저로 다시 렌더링되기 전에 사용자 입력을 삭제하는 것입니다. PHP에는 사용할 수있는 "필터"기능이 있습니다.
XSS가 일반적으로 공격하는 형태는 사용자를위한 악의적 인 의도가 포함 된 일부 오프 사이트 자바 스크립트에 대한 링크를 삽입하는 것입니다. 자세한 내용은 여기를 참조하십시오.
또한 사이트를 테스트하고 싶습니다. Firefox 부가 기능 XSS Me를 추천 할 수 있습니다.
-
==============================
4.
선호 순서대로 :
또한 입력시가 아니라 출력시 이스케이프 처리를 확인하십시오.
-
==============================
5.
<?php function xss_clean($data) { // Fix &entity\n; $data = str_replace(array('&','<','>'), array('&amp;','&lt;','&gt;'), $data); $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data); $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data); $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8'); // Remove any attribute starting with "on" or xmlns $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data); // Remove javascript: and vbscript: protocols $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data); $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data); $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data); // Only works in IE: <span style="width: expression(alert('Ping!'));"></span> $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data); $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data); $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data); // Remove namespaced elements (we do not need them) $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data); do { // Remove really unwanted tags $old_data = $data; $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data); } while ($old_data !== $data); // we are done... return $data; }
-
==============================
6.
오프라인 상태 인 SO Documentation 베타에서 통합 참조로 크로스 게시합니다.
교차 사이트 스크립팅은 웹 클라이언트가 원격 코드를 의도하지 않게 실행하는 것입니다. 사용자가 입력을 받아 웹 페이지에서 직접 출력하는 경우 모든 웹 응용 프로그램이 XSS에 노출 될 수 있습니다. 입력 내용이 HTML 또는 JavaScript를 포함하면이 내용이 웹 클라이언트에 의해 렌더링 될 때 원격 코드가 실행될 수 있습니다.
예를 들어 제 3 자 측에 JavaScript 파일이있는 경우 :
// http://example.com/runme.js document.write("I'm running");
그리고 PHP 응용 프로그램은 전달 된 문자열을 직접 출력합니다.
<?php echo '<div>' . $_GET['input'] . '</div>';
검사되지 않은 GET 매개 변수에
'PHP' 카테고리의 다른 글
PHP에서 HTML / XML을 구문 분석하고 처리하는 방법은 무엇입니까? (0) | 2018.09.02 |
---|---|
PHP에서 유용한 오류 메시지를 얻는 방법? (0) | 2018.09.02 |
PHP를 사용하여 이메일을 보내는 방법은 무엇입니까? (0) | 2018.09.01 |
자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate] (0) | 2018.09.01 |
MySQL에 '존재하지 않으면 삽입'하는 방법? (0) | 2018.09.01 |