2011-08-12 4 views
2

사용자 전기를 표시하기 위해 앱에서 Markdown을 사용하고 있습니다. 사용자가 전기를 약간 포맷 할 수 있기를 바란다. 따라서 TinyMCE 편집기를 사용하게한다.Django의 Markdown 안전 XSS

다음, 전기의 태그가있는 경우 장고가 다른 곳과 마찬가지로 문제는,이 탈출하지 않을되는이

{% load markup %} 

<div id="biography"> 
    {{ biography|markdown }} 
</div> 

처럼 장고 템플릿에 표시. 나는이 악성 스크립트를 탈출 마크 다운을 설정하는 방법

<p><strong>asdfsdafsadf</strong></p> 
<p><strong>sd<em>fdfdsfsd</em></strong><em>sdfsdfsdfdsf</em>sdfsdfsdf</p> 
<p><strong>sdafasdfasdf</strong></p> 

<script>document.location='http://test.com'</script> 

: 이것은 전기 테스트에서 소스 출력? django.contrib.markup.templatetags.markup.markdown의 문서화 문자열에 따르면

답변

3

:

원시 HTML 스트립 만 실제 마크 다운 문법에 의해 생성 된 HTML 을 반환 안전 모드를 활성화하려면, 목록의 첫 번째 확장으로 "안전"전달합니다.

이 작동합니다 : 안전 모드에서

{{ biography|markdown:"safe" }} 
+0

같은 것 '전기'에 원하는 HTML 코드 샘플이 들어있는 상황을 쉽게 처리 할 수있는 방법이 있습니까? 표시 되었습니까? –

-1

마크 다운은 자서전에서 사용자가 입력 할 수 없습니다 HTML 세그먼트 즉, 모든 HTML 태그를 제거합니다. 어떤 경우에는 바람직하지 않습니다. markdown 전에 force_escape을 사용하는 것이 좋습니다. 따라서 markdown에 제공된 모든 항목이 안전합니다. 당신의 전기는

{{ biography|force_escape|markdown }} 

를 사용하는 경우, 대신에 ... HTML REMOVED을 생산하는 것

{{ biography|markdown:"safe"}} 

를 사용하여, <html>I'm really a HTML fan!</html> 경우

예를 들어, 출력은

<p>&lt;html&gt;I'm really a HTML fan!&lt;/html&gt</p> 
+0

이것은 자연적인 접근 방법처럼 보이지만 실제로는 안전하지 않습니다. 예 : "'[clickme] (javascript : alert % 28 % 22xss % 22 % 29)'". 자세한 내용은 다른 곳의 내 설명을 참조하십시오 (http://security.stackexchange.com/a/14674/971). –

+0

@ D.W. 'markdown (html, safe_mode = 'escape')'지금 당장 나를 위해 완벽하게 작동하는 것 같습니다. 문제가 있습니까? – blurrcat

+0

예. 당신은'force_escape | markdown'을 추천했고, 문제는 그 것이 안전하지 않다는 것입니다 : 그것은 안전 플래그로 Markdown을 호출하지 않으므로 설명 된 종류의 공격에 대해 안전하지 않을 것입니다. 자세한 설명은 내가 준 링크를 참조하십시오. 내 말 뜻을보기 위해'markdown (force_escape ("[clickme] (javascript : alert % 28 % 22xss % 22 % 29)"))''을 시도해보십시오. 결과에 자바 스크립트가 들어 있습니다. –