2016-12-11 2 views
0

아래 PHP 페이지 (xss1.php)를 고려하십시오. 내 수수께끼를 이해하기 위해 LAMP 서버 나 VM에 업로드 할 수 있습니다.텍스트 필드의 XSS - PHP 예제

<?php 
ob_start(); 

session_start(); 

$searchValue = ""; 

if ($_SERVER["REQUEST_METHOD"] === "POST") { 
    $searchValue = trim($_POST["txtSearch"]); 
} 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>XSS: Sample 1</title> 
    </head> 
    <body> 
    <form name="xssForm" method="POST" action="xss1.php"> 
     <input type="text" id="txtSearch" name="txtSearch" maxlength="128" value="<?php print($searchValue); ?>"/> 
     <input type="Submit" id="btnSubmit" value="Submit"/> 
    </form> 
    </body> 
</html> 
<?php 
ob_end_flush(); 
?> 

나는 인상을 받고 있었지만 텍스트 필드의 데이터는 그대로 표시되며 XSS 검사를 최소화하거나 필요로하지 않습니다. 이 텍스트 필드에서 내가 붙이면 < 스크립트 > alert (1); </script > 양식이 게시되면 값은 XSS 실행 또는 주입없이 텍스트 필드에 다시 표시됩니다. Firefox 50.0.2를 실행하고 있습니다.

이제 내 맥 OS X의에, 내가 " > < 스크립트에 > 경고를 부착하는 경우 (1); </스크립트 >, XSS가 있으며 자바 팝업 알림이 1 개 표시됩니다. 문자 "/>은 텍스트 필드 뒤에 오며 텍스트 필드 내부가 아닌 페이지에 텍스트로 렌더링됩니다. 여기서 무엇이 바뀌 었습니까? 나는 조금 당황 해요 아마하지만 사파리에서 https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

에서 XSS 필터 회피 치트 시트에 대한 답을 찾기 위해 노력하고 다음 시간을 보낼 것입니다, 나는 자바 스크립트 경고 팝 아웃이 표시되지 않지만, "/>은 텍스트 필드 외부, 페이지 바로 다음에 쓰여집니다.

그것은 2:01 오전 PT 있고 난 시애틀에 잠 못 이루는 해요 :)

+0

감사합니다. @ keatinge, htmlspecialchars는 스크립트 엔진이 처리하지 않는 텍스트 필드가 아닌 텍스트 필드가 아닌 페이지에서 텍스트를 렌더링하려는 경우 작동합니다. 그 이유는 가 실행되지 않았습니다. 텍스트 필드에서 htmlspecialchars를 사용하여 지금 시도해 보았습니다. 실행되지 않았습니다. –

답변

0

내가 인상을, 텍스트 필드의 데이터가 그대로 표시하고, 최소 필요하거나 더-XSS는

을 확인하지 않습니다되었다

귀하의 인상이 잘못되었습니다. HTML 문서에 대한 사용자 입력은 XSS에서 고려해야합니다. ,

  • 이 정말 좋은 화이트 리스팅 필터 신뢰할 수있는 소스에서
  • 통과 (그 악성하지 신뢰할 의미하며, 실수로 위험한 뭔가를 작성하지 않고 코드를 작성 이스케이프 : 그것은이어야합니다 이해하지 못하는 코드를 복사/붙여 넣기하지 않기).

문자 "/>하지 텍스트 필드 내부 페이지의 텍스트로 렌더링, 텍스트 필드 다음에 온다. 여기서 무엇이 바뀌 었습니까?

" 문자를 추가했습니다. "은 속성 값을 종료합니다.

그런 다음 >을 추가했습니다. 태그 내부에는 있지만 속성 값 외부에는 >이 태그를 끝냅니다.

원래의 문서에 있던 "/> (사용자 입력의 일부가 아닌)은 사용자 입력의 ">이 그랬기 때문에 더 이상 특성 및 태그를 닫지 않으므로 텍스트로 렌더링됩니다 .

+0

고마워, Quentin! 나는 지금 잠을 잘 수있다 :) –