2012-11-22 13 views
5

में कनवर्ट करें मैं मार्कडाउन स्वीकार कर रहा हूं और इसे Django में सुरक्षित रूप से प्रस्तुत करने के लिए इसे HTML में परिवर्तित करने की आवश्यकता है। अभी मैं form.cleaned_data को स्वीकार कर रहा हूँ और यह परिवर्तित करने के साथ HTML में:Django/Python: मार्कडाउन को सुरक्षित एचटीएमएल

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

टेम्पलेट में, मैं के रूप में यह प्रतिपादन कर रहा हूँ:

{{ object.content|safe|capfirst }} 

हालांकि आप पोस्ट करता है, तो:

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

जेएस प्रस्तुत करेगा ताकि एक्सएसएस संभव हो।

उत्तर

2

Django के safe template tag में बनाया मतलब है कि आप उस चर चिह्नित कर रहे हैं उत्पादन के रूप में ठीक है, यानी आप जानते हैं कि यह सामग्री सुरक्षित हैं:

सुरक्षित: आगे HTML आउटपुट से पहले भागने की आवश्यकता नहीं के रूप में एक स्ट्रिंग में चिह्नित करता है।

Django default escapes your template variables:

Django में डिफ़ॉल्ट रूप से से, हर खाका अपने हर चर टैग के उत्पादन में निकल जाता है। विशेष रूप से, इन पांच पात्रों भाग निकले कर रहे हैं ...

लेकिन यह (यह सिर्फ यह फिर से चंगा कर), तो आपको मैन्युअल रूप से करने के लिए एक टेम्पलेट टैग के साथ की जरूरत है आप के लिए दूर जावास्क्रिप्ट पट्टी नहीं होगा:

Strip javascript code before rendering in django templates

दूसरी ओर, safe_modemarkdown पर [HTML REMOVED] के साथ पाठ में किसी भी HTML आप देखा है के रूप में स्ट्रिप्स।

तो safe को हटाने के लिए इसे सुरक्षित बनाने के लिए पर्याप्त होना चाहिए,

+0

उत्तर के लिए धन्यवाद। मैंने टेम्पलेट से 'सुरक्षित' हटा दिया, हालांकि यह अभी भी प्रतिपादन कर रहा है। जेएस में, मैं स्क्रिप्ट टैग्स को सीधे सीधे नहीं जोड़ रहा हूं "0; यूआरएल = जावास्क्रिप्ट: अलर्ट ('हाय');" http-equiv = "ताज़ा करें" जो जेएस फ़िल्टर से गुजर रहा है। – user1846171

+0

यह कहां प्रस्तुत कर रहा है? यदि एचटीएमएल हटाया जा रहा है, और कोई '

संबंधित मुद्दे