2012-11-22 27 views
5

Tôi chấp nhận Markdown và cần chuyển đổi nó thành HTML để hiển thị an toàn ở Django. Ngay bây giờ tôi đang chấp nhận form.cleaned_data và chuyển đổi nó sang HTML với:Django/Python: Chuyển đổi Markdown thành HTML an toàn

import markdown 
html_body = markdown.markdown(body_markdown, safe_mode=True) 
html_body = html_body.replace('[HTML_REMOVED]', '') 
return html_body 

Trong mẫu, tôi làm cho nó như:

{{ object.content|safe|capfirst }} 

Tuy nhiên nếu bạn đăng bài:

0;url=javascript:alert('hi');" http-equiv="refresh 

JS sẽ hiển thị để XSS có thể thực hiện được.

Trả lời

2

của django xây dựng trong safe template tag nghĩa là bạn đang đánh dấu biến như ok đến đầu ra, ví dụ: bạn biết rằng đó là nội dung được an toàn:

an toàn: Đánh dấu một chuỗi như không đòi hỏi HTML tiếp tục thoát ra trước khi đầu ra.

Django bởi default escapes your template variables:

Theo mặc định trong Django, mỗi mẫu tự động thoát đầu ra của mỗi thẻ biến. Cụ thể, cả năm nhân vật đang trốn thoát ...

nhưng nó sẽ không tước javascript xa cho bạn (nó sẽ chỉ làm cho nó không sử dụng được), bạn cần phải làm điều đó bằng tay với một mẫu thẻ:

Strip javascript code before rendering in django templates

Mặt khác, safe_mode trên markdown xoá mọi HTML trong văn bản bằng [HTML REMOVED] như bạn đã thấy.

Vì vậy, việc xóa safe là đủ để đảm bảo an toàn,

+0

Cảm ơn câu trả lời. Tôi đã xóa 'an toàn' khỏi mẫu, tuy nhiên nó vẫn đang hiển thị. Trong JS, tôi không bao gồm các thẻ script chỉ thẳng "0; url = javascript: alert ('hi');" http-equiv = "refresh" đang chuyển qua bộ lọc JS. – user1846171

+0

nó sẽ hiển thị ở đâu? Nếu HTML đang bị xóa và không có thẻ '

Các vấn đề liên quan