마크 다운을 메시지 본문으로 입력 할 수있는 양식이 있다고 가정 해 보겠습니다. 텍스트는 다른 페이지로 HTML에서 JSON 렌더링 : XSS 공격은 * 단지 * 페이지 렌더링을 중단시키는 것을 어떻게 막아야합니까?
<html>
<body>
<script type="text/javascript">
loadMessage({
name: 'John Doe',
message: '**Hello** World'
});
</script>
</body>
</html>
는
loadMessage
는 인하 파서 (예컨대
marked)를 사용하고, 실행시에 HTML을 출력 척.
</script>
는 스크립트 블록을 닫 브라우저를 일으키는
Unexpected token ILLEGAL
예외가 발생
<html>
<body>
<script type="text/javascript">
loadMessage({
name: 'John Doe',
message: '</script>'
});
</script>
</body>
</html>
때문에 :
나는 악의적 인 사용자가 페이지에 오류가 발생할 수있는 경우를 확인했습니다. Marked는 그러한 공격을 삭제할 수 있지만이 공격은 JavaScript 실행 전에도 발생합니다.
- 처음 양식을 제출할 때 모두
<script>
과을 제거하십시오. 이것은 많은 프레임 워크 코드를 업데이트하는 것을 의미합니다 (ASP.NET MVC를 사용하므로 기본 ModelBinder를 확장해야합니다). - 이것을 위해 JSON 포맷터를 활용하십시오. JSON을 작성할 때
'</' + 'script>'
으로 변환하십시오. 우리는 소스를 손상시키지 않을 것입니다.하지만 아마도 은 나쁜 것입니다..
어떻게 이러한 공격을 완화해야합니까?
HTML 엔티티를 벗어나지 마십시오. – Blender
마크 다운 및 마크 다운 [HTML 허용] (http://daringfireball.net/projects/markdown/syntax#html)입니다. 탈출하고 클라이언트에서 벗어날 가치가 있습니까? – TheCloudlessSky
Markdown을 JavaScript에 출력하고 HTML에 직접 출력하지 않는 특별한 이유가 있습니까? – Blender