2009-11-10 4 views
2

페이지에 추가 할 html (이 경우 TinyMCE를 통해 생성)이 있습니다. 그러나 보안상의 이유로 사용자가 입력 한 모든 내용을 인쇄하고 싶지는 않습니다.html 하위 집합을 렌더링하기위한 Django templatetag

HTML의 안전한 하위 집합 만 렌더링 할 수있는 templatetag (필터가 선호 됨)를 아는 사람이 있습니까?

나는 markdown 및 다른 사람들이 이것을 알고 있습니다. 그러나 사용자가 markdown에 대해 알지 못하는 서식있는 텍스트 편집기를 사용하고 있기 때문에 사용자에게 혼동을 줄 수있는 마크 업 구문을 추가합니다.

제거 할 태그의 목록을 지정 removetags을 사용할 수 있습니다

답변

6

removetags하지만 그들이 정확하게 잘 형성 태그처럼 보이지 않을 때 태그를 제거하지 못하는 블랙리스트 접근 방식 Django는 애트리뷰트 제거를 시도하지 않았기 때문에 <script> 태그를 포함하지 않는 1,000 가지 다른 스크립트 삽입 방법에 완전히 취약하다는 사실을 알고 있습니다. 그것은 실제 보안을 전혀 제공하지 않지만 안전함을 제공하는 함정입니다.

정규식 해킹을 기반으로하는 HTML- sanitisation 방식은 거의 필연적으로 전체 실패입니다. 실제 HTML 파서를 사용하여 제출 된 컨텐트에 대한 객체 모델을 얻은 다음 알려진 형식으로 필터링하고 다시 직렬화하는 것이 일반적으로 가장 신뢰할 수있는 방법입니다.

리치 텍스트 편집기에서 XHTML을 출력하는 경우 간단히 minidom 또는 etree를 사용하여 문서를 구문 분석 한 다음 알려진 모든 요소 및 특성을 제거하고 마지막으로 안전한 XML로 다시 변환하십시오. 반면에 HTML을 내보내거나 HTML을 입력 할 수있게하려면 BeautifulSoup와 같은 것을 사용해야 할 수 있습니다. 자세한 내용은 this question을 참조하십시오.

필터링 HTML은 크고 복잡한 주제이므로 많은 사람들이 제한있는 마크 업 언어를 선호합니다.

-1

:

{{ data|removetags:"script" }} 
+2

-1 실제 이점이없는 보안의 환상을 제공하기 때문에 이것은 아무것도 아닌 것보다 나쁩니다. 이러한 종류의 블랙 리스팅 접근에는 백만 가지 방법이 있습니다. –

0

HTML 정제기, html5lib 또는 HTML 위생 처리를 위해 만들어진 다른 라이브러리를 사용하십시오.

관련 문제