2011-10-10 12 views
5

यह 100% सुरक्षित यह देखते हुए कि तीसरे पक्ष के इनपुट कुछ भी (HTML, सीएसएस, आदि), मुझे यकीन है कि हो सकता है यह कोई नुकसान करता है, तो काम नहीं चलेगा कर सकते हैं निम्नलिखित ?:क्या यह निम्नलिखित करने के लिए 100% सुरक्षित है?

var untrusted_input_from_3rd_party = '<script>alert("xss")<\/script>'; 
document.getElementsByTagName('body')[0].appendChild(document.createTextNode(untrusted_input_from_3rd_party)); 

क्या करना है मैं createTextNode के माध्यम से इसे पास करें और फिर इसे डोम में जोड़ें?

+1

* कुछ भी * कभी भी "100% सुरक्षित" है? – Spudley

+0

शायद 99.9% हो सकता है? :) – Polar

+0

संभावित डुप्ली: http://stackoverflow.com/questions/476821/is-a-dom-text-node-guaranteed-to-not-be-interpreted-as-html –

उत्तर

5

यह एक्सएसएस को रोकने के लिए एक बढ़िया तरीका है। createTextNode के माध्यम से डोम मैनिपुलेशन का व्यापक रूप से तृतीय पक्ष टेक्स्ट को सुरक्षित रूप से एम्बेड करने के लिए उपयोग किया जाता है।

उस ने कहा, एक्सएसएस के अलावा समस्याएं हैं। यह सोशल इंजीनियरिंग के प्रयास को रोकने के लिए है, तो अविश्वसनीय इनपुट की तरह कुछ है कुछ नहीं करता:

चेतावनी: हम आपके कंप्यूटर पर मैलवेयर का पता चला है। समस्या को ठीक करने के लिए अपने ब्राउज़र यूआरएल बार में http://evil.org/ कॉपी और पेस्ट करें।

सामाजिक इंजीनियरिंग को रोकने के लिए सबसे अच्छा तरीका (तृतीय पक्ष सामग्री सहित नहीं) यह स्पष्ट करना है कि सामग्री किसी तीसरे पक्ष से आती है।

1

अब इसका परीक्षण किया गया। सही लगता है। अगर कुछ गलत हो जाता है - यह ब्राउज़र बग होना चाहिए, न कि आपके।
सामान्य सर्वर को सभी उपयोगकर्ता इनपुट का सही HTML दृश्य बनाना चाहिए और फिर उसे उपयोगकर्ता को वापस देना चाहिए।

लेकिन सर्वर लोडिंग को कम करने के लिए (और यदि यह स्वीकार्य है) तो आप इसे निश्चित रूप से उपयोग कर सकते हैं।

1

मुझे यह किसी मानक मानक ब्राउज़र में निष्पादित नहीं किया जा रहा है क्योंकि इसे टेक्स्ट नोड के रूप में प्रस्तुत किया जा रहा है। अच्छा पढ़ा गया: http://www.educatedguesswork.org/2011/08/guest_post_adam_barth_on_three.html

+0

ने इसे फ़ायरफ़ॉक्स 7 कंसोल में 5 मिनट पहले परीक्षण किया – Sergey

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