2013-10-30 4 views
5

मेरे पास मेरे यूआई (जावा-आधारित वेब ऐप के लिए) में एक HTML टेक्स्टरेरा है जहां कोई उपयोगकर्ता कोई मान दर्ज कर सकता है। एक बार यह सहेजा जाने के बाद, यह ब्राउज़र में textarea (जो अक्षम है) में प्रदर्शित होता है।क्या एक एक्सएसएसएसएस हमले संभव है जब एक HTML textarea में एक स्क्रिप्ट प्रदर्शित होती है?

यदि कोई उपयोगकर्ता टेक्स्टरी में मुफ्त टेक्स्ट के रूप में किसी भी स्क्रिप्ट में प्रवेश करता है, तो इसे स्क्रिप्ट के रूप में निष्पादित किया जाएगा (भले ही मान टेक्स्टर में दिखाया गया हो, न कि लेबल/टेक्स्ट के रूप में)?

+0

चलिए अपना कोड देखें। –

उत्तर

4

यह इस बात पर निर्भर करता है कि आप 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() एक ही हमले के लिए कमजोर है।

+1

+1 हां, यह निर्भर करता है कि यह सर्वर पक्ष या क्लाइंट पक्ष सेट है या नहीं, हालांकि आप उस दस्तावेज़ में सही हैं .write() 'भी कमजोर है। इसका एक त्वरित उदाहरण यहां: https://dl.dropboxusercontent.com/u/1075151/dwrite.htm (क्रोम में काम करता है)। – SilverlightFox

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