नियमित अभिव्यक्तियों के साथ ऐसा न करें। याद रखें, आप केवल वैध HTML के खिलाफ सुरक्षा नहीं कर रहे हैं; आप वेब ब्राउज़र बनाने वाले डीओएम के खिलाफ सुरक्षा कर रहे हैं। अवैध एचटीएमएल से वैध डीओएम को आसानी से उत्पादित करने में ब्राउज़रों को धोखा दिया जा सकता है।
उदाहरण के लिए, obfuscated XSS attacks की यह सूची देखें। क्या आप आईई 6/7/8 पर Yahoo and Hotmail पर इस असली दुनिया के हमले को रोकने के लिए रेगेक्स तैयार करने के लिए तैयार हैं?
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
आईई 6 पर काम करने वाले इस हमले के बारे में कैसे?
<TABLE BACKGROUND="javascript:alert('XSS')">
इस साइट पर सूचीबद्ध हमलों के बारे में कैसे? जेफ के दृष्टिकोण के साथ समस्या यह है कि दावा किया गया है कि यह एक श्वेतसूची नहीं है। that page पर किसी adeptly नोटों के रूप में:
समस्या इसके साथ, कि एचटीएमएल स्वच्छ होना चाहिए है। ऐसे मामले हैं जहां आप हैक किए गए एचटीएमएल में जा सकते हैं, और यह इससे मेल नहीं खाएगा, इस मामले में यह हैक की गई HTML स्ट्रिंग को वापस कर देगा क्योंकि प्रतिस्थापित करने के लिए कुछ भी मेल नहीं खाएगा। यह कड़ाई से श्वेतसूची नहीं है।
मैं AntiSamy जैसे उद्देश्य उद्देश्य टूल का सुझाव दूंगा। यह वास्तव में एचटीएमएल को पार्स करके काम करता है, और फिर डीओएम को घुमाता है और कॉन्फ़िगर करने योग्य श्वेतसूची में नहीं है जो कुछ भी हटा रहा है। मुख्य अंतर विकृत रूप से विकृत HTML को संभालने की क्षमता है।
सबसे अच्छा हिस्सा यह है कि यह वास्तव में उपरोक्त साइट पर सभी एक्सएसएस हमलों के लिए यूनिट परीक्षण करता है। इसके अलावा, क्या इस API कॉल की तुलना में आसान हो सकता है:
public String toSafeHtml(String html) throws ScanException, PolicyException {
Policy policy = Policy.getInstance(POLICY_FILE);
AntiSamy antiSamy = new AntiSamy();
CleanResults cleanResults = antiSamy.scan(html, policy);
return cleanResults.getCleanHTML().trim();
}
स्रोत
2009-02-11 00:59:10
आप और अधिक क्या आवश्यकता है? जवाब मेरे लिए अच्छा लग रहा है। –