इसके अलावा, यह उल्लेख करना महत्वपूर्ण है कि लोगों को आपके पृष्ठ में HTML या जावास्क्रिप्ट को इंजेक्ट करने की अनुमति दी जा रही है (और आपके डेटा स्रोत नहीं) में कोई अंतर्निहित सुरक्षा जोखिम नहीं है। पहले से ही ब्राउज़र एक्सटेंशन मौजूद हैं जो आपको वेब पृष्ठों पर डीओएम और स्क्रिप्ट को संशोधित करने की अनुमति देते हैं, लेकिन चूंकि यह केवल क्लाइंट-साइड है, वे केवल एक ही हैं जो जान लेंगे।
जहां एक्सएसएस एक समस्या बन जाती है, जब लोग ए) क्लाइंट-साइड सत्यापन या इनपुट फ़िल्टरिंग को बाईपास करने के लिए इसका उपयोग करते हैं या बी) जब लोग इनपुट फ़ील्ड में हेरफेर करने के लिए इसका उपयोग करते हैं (उदाहरण के लिए, एसीएल में विकल्प टैग के मानों को बदलना उन अनुमतियों को प्रदान करें जिनके पास नहीं होना चाहिए)। इन हमलों के खिलाफ रोकने का एकमात्र तरीका क्लाइंट-साइड सत्यापन के बजाय सर्वर-साइड पर इनपुट को वैध और मान्य करना है।
इनपुट से बाहर एचटीएमएल sanitizing के लिए, htmlspecialchars पूरी तरह से पर्याप्त है जब तक आप कुछ टैग, जिस स्थिति में आप HTMLPurifier की तरह एक पुस्तकालय का उपयोग कर सकते की अनुमति देना चाहते है। यदि आप HREF, ONCLICK, या स्क्रिप्टिंग की अनुमति देने वाली किसी भी विशेषता में उपयोगकर्ता इनपुट डाल रहे हैं, तो आप केवल परेशानी के लिए पूछ रहे हैं।
संपादित करें: अपने कोड को देखते हुए, यह है कि आप अपने गुण के हवाले नहीं कर रहे हैं लग रहा है! यही कारण है कि बहुत मूर्खतापूर्ण है।
john onclick="alert('hacking your megabits!1')"
फिर अपने स्क्रिप्ट के रूप में पार्स होगा:: अगर कोई व्यक्ति अपने उपयोगकर्ता नाम के रूप में रखा
<input type=text name=username value=john onclick="alert('hacking your megabits!1')">
हमेशा उद्धरण चिह्नों का उपयोग चारों ओर जिम्मेदार बताते हैं। भले ही वे उपयोगकर्ता के इनपुट नहीं हैं, इसे में प्राप्त करने के लिए एक अच्छी आदत है।
<input type="text" name="username" value="<?php echo htmlspecialchars($_POST['username']); ?>">
उत्कृष्ट प्रश्न, क्योंकि मैं मैं सुरक्षा के लिए htmlspecialchars() पर भरोसा कर रहा हूं - जैसा कि, मुझे यकीन है कि, बहुत से लोग मुझे आश्चर्यचकित करते हैं कि क्या आप एक eval() में या कुछ फिसल सकते हैं ... विशेष रूप से जब मुझे लगता है कि ब्राउजर पास होने से पहले डी-एंटाइटलाइज करता है जेएस दुभाषिया के लिए मूल्य। मुझे लगता है कि यदि आप उपयोगकर्ता डेटा को ऑनक्लिक या href या अन्य निष्पादन योग्य विशेषता में डाल रहे हैं तो यह सबसे अधिक शोषक होगा; मूल्य विशेषता का शोषण करना कठिन लगता है। –
@ फ्रैंक: यदि आप दुर्भावनापूर्ण डेटा डाल रहे हैं जावास्क्रिप्ट, आपको इसे जावास्क्रिप्ट-एन्कोड करने की भी आवश्यकता है। – SLaks