HTML स्ट्रीम में कभी भी किसी भी प्रकार का डेटा आउटपुट न करें जो htmlspecialchars()
के माध्यम से पारित नहीं किया गया है और आपने कल लिया। सरल नियम, पालन करने में आसान, किसी भी XSS जोखिम को पूरी तरह से समाप्त कर देता है।
एक प्रोग्रामर के रूप में यह आपका है हालांकि इसे करने के लिए काम।
आप परिभाषित कर सकते हैं
function h(s) { return htmlspecialchars(s); }
अगर htmlspecialchars()
प्रति PHP फ़ाइल में 100 बार लिखने के लिए बहुत लंबा है। दूसरी ओर, htmlentities()
. का उपयोग करके बिल्कुल जरूरी नहीं है।
मुख्य बिंदु यह है:कोड है, और डेटा है। यदि आप दोनों को आपस में मिलाते हैं, तो बुरी चीजें होती हैं।
एचटीएमएल के मामले में, कोड तत्व, विशेषता नाम, संस्थाएं, टिप्पणियां हैं। डेटा बाकी सब कुछ है। डेटा होना चाहिए कोड के लिए गलत होने से बचने के लिए बच निकले।
URL के मामले में, कोड स्कीम, होस्ट नाम, पथ, क्वेरी स्ट्रिंग का तंत्र है (?
, &
, =
, #
) क्वेरी स्ट्रिंग में डेटा सब कुछ है:पैरामीटर नाम और मान। उन्हें जरूरी कोड के लिए गलत होने से बचने के लिए बच निकले।
HTML में एम्बेड किए गए URL होना चाहिए दोगुने बच निकले (यूआरएल से बचकर और एचटीएमएल-एस्केपिंग) कोड और डेटा के उचित पृथक्करण को सुनिश्चित करने के लिए।
आधुनिक ब्राउज़र आश्चर्यजनक रूप से टूटे और गलत मार्कअप को किसी उपयोगी चीज़ में पार्स करने में सक्षम हैं। हालांकि, इस क्षमता पर जोर नहीं दिया जाना चाहिए। तथ्य यह है कि कुछ काम करने के लिए होता है (जैसे <a href>
. में URLs उचित HTML-एस्केपिंग लागू किए बिना) का अर्थ यह नहीं है कि ऐसा करना अच्छा या सही है। XSS एक ऐसी समस्या है जिसकी जड़ें a) डेटा/कोड पृथक्करण से अनजान लोग (यानी "भागना") या जो मैला हैं और b) वे लोग जो डेटा के किस हिस्से से बचने की आवश्यकता नहीं है, इस बारे में चतुर होने की कोशिश करते हैं।
XSS से बचना काफी आसान है यदि आप सुनिश्चित करते हैं कि आप श्रेणियों a) और b) में नहीं आते हैं।