HTML विशेषता संदर्भ के लिए अविश्वसनीय डेटा को एन्कोड करने का उचित तरीका क्या है? उदाहरण के लिए:PHP: HTML विशेषता एन्कोडिंग/जावास्क्रिप्ट डिकोडिंग
<input type="hidden" value="<?php echo $data; ?>" />
मैं आमतौर पर htmlentities()
या htmlspecialchars()
यह करने के लिए उपयोग करें:
<input type="hidden" value="<?php echo htmlentities($data); ?>" />
हालांकि, मैं हाल ही में एक मुद्दा यह है जहाँ मेरे आवेदन को तोड़ने जब डेटा मैं पारित करने के लिए की जरूरत है एक था में भाग यूआरएल जो जरूरत जावास्क्रिप्ट को हस्तांतरित कर दिया करने के लिए पेज स्थान बदलने के लिए:
<input id="foo" type="hidden" value="foo?bar=1&baz=2" />
<script>
// ...
window.location = document.getElementById('foo').value;
// ...
</script>
इस मामले में, foo
एक सी कार्यक्रम है, और यह यूआरएल और segfaults में एन्कोडेड वर्णों को समझ में नहीं आता है।
मैं आसानी से जावास्क्रिप्ट में मान ले सकता हूं और value.replace('&', '&')
जैसा कुछ कर सकता हूं, लेकिन यह लगता है कि यह kludgy है, और केवल ampersands के लिए काम करता है।
तो, मेरा सवाल यह है: क्या एचटीएमएल विशेषताओं में इंजेक्शन वाले डेटा के एन्कोडिंग या डिकोडिंग के बारे में जाने का कोई बेहतर तरीका है?
मैं OWASP's XSS Prevention Cheatsheet पढ़ लिया है, और यह रूप में लंबे समय के रूप में मैं अपने गुण उद्धृत करने के लिए सावधान कर रहा हूँ की तरह मेरे लिए लगता है, उसके बाद ही चरित्र मैं सांकेतिक शब्दों में बदलना करने की जरूरत बोली ही ("
) है - जो मामले में, मैं str_replace('"', '"', ...)
जैसे कुछ का उपयोग कर सकते हैं - लेकिन, मुझे यकीन नहीं है कि मैं इसे ठीक से समझ रहा हूं। HTML के लिए
decodeHTMLSpecialChars('http://someurl.com/foo?bar=1&baz=2');
// => 'http://someurl.com/foo?bar=1&baz=2
और नहीं,:
उदाहरण urlencode PHP में इस बात का ध्यान रखना नहीं है मिल सकती है? टिप्पणियों में कुछ कोड उदाहरण हैं जो दिखाते हैं कि PHP मैन्युअल पर भी XSS के विरुद्ध सुरक्षा कैसे करें। http://php.net/manual/en/function.urlencode.php – GillesC
@gillesc: 'urlencode()' एन्कोडिंग यूआरएल * पैरामीटर * के लिए है, पूरे यूआरएल नहीं, और HTML विशेषता संदर्भ के लिए एन्कोड नहीं करता है। मैनुअल में एक अनुभाग है जो इसके बारे में भी बात करता है - * "इसे छोड़ दें और, लेकिन htmlentities() या htmlspecialchars() का उपयोग करके अपने यूआरएल को एन्कोड करें।" * – FtDRbwLXw6
क्या आप 'window.location = document.getElementById ('foo'); '? ऐसा होना चाहिए जैसा कि मुझे लगता है-> 'window.location = document.getElementById ('foo')। मान; 'और यह सही पृष्ठ पर रीडायरेक्ट करता है (foo? bar = 1 और baz = 2) – ocanal