यह इस बात पर निर्भर करता है कि आप textarea
के मान को कैसे सेट करते हैं। एचटीएमएल कोड में, textarea
की सामग्री तत्व के अंदर पाठ है।
मैं एक textarea
<div><textarea id="e1"></textarea></div>
<div><textarea id="e2"></textarea></div>
<div id="e3"/>
var dangerous = '<scri' + 'pt>alert("Danger!");</scri' + 'pt>';
document.getElementById('e1').value = dangerous;
document.getElementById('e2').innerHTML = dangerous;
dangerous = '</textarea>' + dangerous;
var content = '<textarea>' + dangerous + '</textarea>';
document.getElementById('e3').innerHTML = content;
console.log('Done.');
यह एक स्क्रिप्ट के साथ दो textarea
तत्वों के अंदर (बचाने के लिए) और एक खाली एक बनाता है की सामग्री को बदलने के लिए एक JSFiddle to demonstrate विभिन्न तरीकों से बना लिया है।
अंतिम परीक्षण में, मैं इनपुट में textarea
बंद करता हूं और फिर स्क्रिप्ट संलग्न करता हूं। दिलचस्प बात यह है कि innerHTML
सेटिंग इस मामले में उपयोग करने के लिए सुरक्षित है: It doesn't execute scripts inserted in this way।
तो जब तक आप इसे जावास्क्रिप्ट में करते हैं, तो आप बहुत सुरक्षित हैं। लेकिन आम तौर पर, आप सर्वर पर पेज के डोम प्रस्तुत करना और उसके बाद क्या आप वाकई ठीक से की textarea
क्योंकि सामग्री से बचने करना चाहिए:
String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>";
out.write("<textarea>");
out.write(content);
out.write("</textarea>");
स्क्रिप्ट को निष्पादित करेंगे।
नोट: मैंने document.write()
प्रदर्शित करने की भी कोशिश की लेकिन जेएसफ़ीडल में इसकी अनुमति नहीं है। मुझे पूरा यकीन है कि document.write()
एक ही हमले के लिए कमजोर है।
स्रोत
2013-10-30 08:23:32
चलिए अपना कोड देखें। –