아래 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 있고 난 시애틀에 잠 못 이루는 해요 :)
감사합니다. @ keatinge, htmlspecialchars는 스크립트 엔진이 처리하지 않는 텍스트 필드가 아닌 텍스트 필드가 아닌 페이지에서 텍스트를 렌더링하려는 경우 작동합니다. 그 이유는 가 실행되지 않았습니다. 텍스트 필드에서 htmlspecialchars를 사용하여 지금 시도해 보았습니다. 실행되지 않았습니다. –