서버 변수를 페이지에 반영 할 때 모든베이스를 보안으로 다루었습니까?

StackOverflow https://stackoverflow.com/questions/613680

  •  03-07-2019
  •  | 
  •  

문제

내가 항상 사용한 형태로

<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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top