2012-01-25 5 views
34

संभावित रूप से असुरक्षित डेटा एन्कोडिंग करते समय, > को एन्कोड करने का कोई कारण है?एचटीएमएल: क्या मुझे अधिक से अधिक एन्कोड करना चाहिए या नहीं? (> >)

  • यह validates किसी भी तरह से।
  • ब्राउज़र ही किसी भी तरह, (attr="data", attr='data', <tag>data</tag> के मामलों में)

मुझे लगता है कि कारणों किसी इस

  • regex आधारित टैग हटाने आसान बनाने के लिए कर रहे हैं करना होगा व्याख्या करता है। <[^>]+>? (दुर्लभ)
  • गैर-उद्धृत तार attr=data: -o (नहीं हो रहा है!)
  • कोड में सौंदर्यशास्त्र। (तो क्या?)

क्या मुझे कुछ याद आ रही है?

उत्तर

29

एचटीएमएल इंजेक्शन को रोकने के लिए कड़ाई से बोलते हुए, आपको केवल < को &lt; के रूप में एन्कोड करने की आवश्यकता है।

यदि उपयोगकर्ता इनपुट को एक विशेषता में रखा जा रहा है, तो " को &quot; के रूप में भी एन्कोड करें।

यदि आप सही काम कर रहे हैं और सही ढंग से उद्धृत विशेषताओं का उपयोग कर रहे हैं, तो आपको > पर चिंता करने की आवश्यकता नहीं है। हालांकि, अगर आप इसके बारे में निश्चित नहीं हैं तो आपको इसे केवल मन की शांति के लिए एन्कोड करना चाहिए - इससे कोई नुकसान नहीं होगा।

+2

** सुरक्षा चेतावनी: ** यह उत्तर गलत है। एक मूल उदाहरण के लिए, '' एक स्वीकार्य विशेषता उद्धरण चिह्न है और इस तरह की विशेषता में इसे से बचने से हमला वेक्टर नहीं है। संदर्भ के आधार पर अन्य हमले वैक्टर भी हैं। –

+0

यह सच है कि "'उद्धरण उद्धरण के लिए' '' '' 'का उपयोग किया जा सकता है। असल में, उद्धरण चिह्नों के साथ विशेषताओं को जोड़ना संभव है। डेवलपर को बिना किसी धारणा के अपने आवेदन को समझना चाहिए। मेरे मामले में, सभी गुणों को नवीनतम मानक ''' का उपयोग करके उद्धृत किया गया है, इसलिए यह उत्तर मेरे लिए सही था। –

15

अपने खंड 5.3.2 में HTML4 विनिर्देश का कहना है कि

लेखकों के बजाय पाठ में "&gt;" (ASCII दशमलव 62) का उपयोग करना चाहिए ">"

तो मैं आपको लगता है कि को >&gt; पर हस्ताक्षर करना चाहिए (क्योंकि आपको मानकों का पालन करना चाहिए)।

+1

यह मानकों जहां संभव आज्ञा का पालन करने का प्रयास करने के लिए अच्छा है - लेकिन हम सभी जानते हैं कि मानकों का पालन करना असंभव है, और अपनी साइट को सभी पर काम करने के लिए मिलता है (और मुझे स्पष्ट रूप से आईई 6 का मतलब है) ब्राउज़र। इसलिए, कुछ परिस्थितियों में सामान्य ज्ञान की अनुमति है - और यदि आप ऐसा कुछ कर सकते हैं जो सभी मौजूदा ब्राउज़रों पर काम करता है, और आप सभी भावी ब्राउज़रों पर काम करने की उम्मीद करते हैं, और यह सामान्य अभ्यास है - तो मुझे यकीन नहीं है कि यह dogmatically पालन करना आवश्यक है मानकों। –

+1

लेकिन मूल पोस्टर के मामले में, मानक का पालन करने के लिए यह संभव और सरल है। जब वह इससे बच सकता है तो वह उनके खिलाफ कुछ क्यों करना चाहिए? –

+4

मानक कहता है, चाहिए नहीं। और अधिक विशिष्टता: "... पुराने उपयोगकर्ता एजेंटों के साथ समस्याओं से बचने के लिए"। इसका मतलब है, यदि आप पूर्व-1999 ब्राउज़र को लक्षित नहीं करते हैं, तो आपको कुछ भी करने की आवश्यकता नहीं है। – user123444555621

-2

एन्कोडिंग एचटीएमएल वर्ण हमेशा एक नाजुक काम है। आपको हमेशा एन्कोड करना चाहिए जो एन्कोड किए जाने की आवश्यकता है और हमेशा मानकों का उपयोग करें। डबल कोट्स का उपयोग मानक है, और यहां तक ​​कि डबल कोट्स के अंदर उद्धरण भी एन्कोड किया जाना चाहिए। हमेशा ENCODE। इस तरह की कल्पना करें

<div> this is my text an img></div> 

शायद आईएमजी> ब्राउज़र से छवि टैग के रूप में पार्स किया जाएगा। ब्राउज़र हमेशा अनजान टैग या उद्धरण को हल करने का प्रयास करते हैं। चूंकि बेसिल मानकों का उपयोग करता है, अन्यथा आप त्रुटियों के स्रोत को समझे बिना अप्रत्याशित परिणाम प्राप्त कर सकते हैं।

+0

* "शायद आईएमजी> ब्राउज़र से एक छवि टैग के रूप में पार्स किया जाएगा" *, मुझे नहीं लगता। –

+0

तो आपको नहीं लगता, वास्तव में आपको लगता है? – albanx

+0

ठीक है, [देखते हैं कि अन्य लोग क्या सोचते हैं] (http://stackoverflow.com/questions/17685535/would-the-browser-ever-try-to-parse-img)। –

0

हमेशा

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

यदि आप उपयोगकर्ता इनपुट के आधार पर गतिशील आउटपुट से निपट नहीं रहे हैं, तो यह कम समस्या की तरह महसूस हो सकता है, हालांकि कम से कम समझना नहीं है, अगर कम आदत नहीं है।

+2

एक्सएसएस इंजेक्शन को रोकने के लिए '<' से बचना है। मुझे विश्वास नहीं है कि यह '>' पर लागू होता है। –

3

वर्तमान 'ब्राउज़रों एचटीएमएल पारसर्स साथ uquoted > रों

हालांकि, दुर्भाग्य से, जे एस में "parse" HTML के लिए रेगुलर एक्सप्रेशन का उपयोग बहुत आम है कोई समस्या नहीं। (उदाहरण: Ext.util.Format.stripTags)। इसके अलावा खराब लिखित कमांड लाइन टूल्स, आईडीई, या जावा क्लासेस इत्यादि को एक ओपनिंग टैग के लिमिटर को निर्धारित करने के लिए परिष्कृत नहीं किया जा सकता है।

तो, अगर आप इस तरह के कोड के साथ समस्या में पड़ सकते:

<script data-usercontent=">malicious();//"></script> 

(! ध्यान दें कि कैसे वाक्य रचना हाइलाइटर व्यवहार करता है इस स्निपेट)

+0

बेशक, परिस्थितियों के आधार पर, आप वास्तव में अपनी सामग्री को पार्स करने के शौकिया प्रयासों को तोड़ने के उद्देश्य से ऐसा करना चाहते हैं (https://xkcd.com/859/ देखें) –

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