2017-03-10 12 views
3

사용자가 임의의 HTML을 허용하는 CKEditor와 같은 편집기를 사용할 수있는 웹 응용 프로그램에서 XSS/JavaScript 삽입에 대한 취약점을 제거하고 싶습니다. (편집자의 특정 선택이 임의의 HTML을 허용하는지 여부와 상관없이 blackhats는 어쨌든 임의의 HTML을 제출하십시오). SCRIPT 태그, ONCLICK 및 가족, 또는 그 밖의 모든 자바 스크립트가 없습니다. 대상 플랫폼은 Python과 Django입니다.Django/Python의 WYSIWYG 입력 HTML에 대한 안전성은 어떻게 보장 할 수 있습니까?

내 최고의 옵션은 무엇입니까? 태그와 속성을 허용 목록에 추가하는 구현에 대해 열려 있습니다. 즉, 사용자가 HTML로 빌드 할 수있는 모든 것을 제출할 수 있도록하는 것이 필요하지는 않지만 자바 스크립트가 제거됩니다. 상당히 풍부한 서식있는 텍스트를 허용 할 수있는 지원되는 태그 가용성을 갖춘 서식있는 텍스트를 가지고있어 기쁘게 생각합니다. 또한 Markdown을 생성하는 편집기를 열어 데이터가 저장되기 전에 모든 HTML 태그를 제거합니다. (HTML 조작이 더 간단 해 보이지만 마크 다운 구현 솔루션도 고려할 것입니다.)

제출이 테스트에 실패했음을 나타내는 예외가 발생하는 경우 위생 텍스트를 생성해야한다고 생각하지 않습니다. (Ergo, 문자열을 소문자로 바꾸고 '< 스크립트', 'onclick'등을 검색하는 것으로 충분할 수 있습니다.)

아마도 내가 선택한 것을 솔루션으로 선택했을 때 태그의 화이트리스트가 될 것입니다. 및 속성 이름.

거기에있는 최상의 솔루션은 무엇입니까?

+1

[bleach] (https://pypi.python.org/pypi/bleach)와 같은 것을 체크 아웃 한 적이 있습니까? 그것은 정확히 당신이 묘사하는 것을합니다. 일부 태그를 통과시키고 악의적 인 태그를 '< >'으로 바꿉니다. – user2896976

+0

사용자 정의 필터를 만들 수 있다고 생각합니다 (http://stackoverflow.com/a/41434870/6396981) ... –

답변

1

HTML을 생성하는 WYSIWYG 편집기를 사용하는 경우 서버에서 bleach을 사용하여 HTML 허용 목록 작성 (화이트리스트 작성을 통한)으로 충분할 것입니다.

마크 다운 (또는 다른 비 HTML 마크 업) 편집기를 사용하기로 선택한 경우 마크 다운 소스를 저장하고 서버 측에서 html (생성 후!)을 생성하고 위생 처리 할 수 ​​있습니다. 이렇게하면 html이 사후 렌더링에 의해 위생적으로 처리되므로 마크 다운을 그대로 유지할 수 있습니다 (인라인 html 등으로). 그러나 클라이언트 측 편집기에서 미리보기를 지원하는 경우 markdown이 서버에서로드 될 때 브라우저 렌더링시주의해야합니다. 대부분의 마크 다운 편집자는 이러한 목적을위한 클라이언트 측 소독제를 포함합니다.