इसे एसओ डॉक्यूमेंटेशन बीटा से एक समेकित संदर्भ के रूप में क्रॉस-पोस्ट करना जो ऑफ़लाइन हो रहा है।
संकट
क्रॉस-साइट स्क्रिप्टिंग एक वेब क्लाइंट द्वारा दूरस्थ कोड का अनपेक्षित निष्पादन है। यदि कोई उपयोगकर्ता से इनपुट लेता है और उसे सीधे वेब पेज पर आउटपुट करता है, तो कोई भी वेब एप्लिकेशन एक्सएसएस के लिए खुद को उजागर कर सकता है। यदि इनपुट में HTML या JavaScript शामिल है, तो वेब क्लाइंट द्वारा इस सामग्री को प्रदान किए जाने पर दूरस्थ कोड निष्पादित किया जा सकता है।
उदाहरण के लिए, यदि तृतीय पक्ष पक्ष में जावास्क्रिप्ट फ़ाइल है:
// http://example.com/runme.js
document.write("I'm running");
और एक PHP अनुप्रयोग सीधे एक स्ट्रिंग को आउटपुट करता है जो इसमें उत्तीर्ण होता है:
<?php
echo '<div>' . $_GET['input'] . '</div>';
यदि एक अनियंत्रित GET पैरामीटर में है <script src="http://example.com/runme.js"></script>
तो PHP स्क्रिप्ट का आउटपुट होगा:
<div><script src="http://example.com/runme.js"></script></div>
तीसरी पार्टी जावास्क्रिप्ट चलेगी और उपयोगकर्ता वेब पेज पर "मैं चल रहा हूं" देखेंगे।
उपाय
एक सामान्य नियम के रूप में, कभी भी क्लाइंट से आने वाले इनपुट पर भरोसा न करें। हर GET, POST, और कुकी मूल्य कुछ भी हो सकता है, और इसलिए इसे मान्य किया जाना चाहिए। जब इनमें से किसी भी मान का आउटपुट दिया जाता है, तो वे बच जाते हैं, इसलिए उनका मूल्यांकन अप्रत्याशित तरीके से नहीं किया जाएगा।
ध्यान रखें कि सरलतम अनुप्रयोगों में भी डेटा को इधर-उधर खिसकाया जा सकता है और सभी स्रोतों पर नज़र रखना कठिन होगा। इसलिए आउटपुट से हमेशा बचना सबसे अच्छा अभ्यास है ।
PHP संदर्भ के आधार पर आउटपुट से बचने के कुछ तरीके प्रदान करता है।
फ़िल्टर फ़ंक्शंस
PHPs फ़िल्टर फ़ंक्शंस php स्क्रिप्ट में इनपुट डेटा को कई तरीकों से सैनिटाइज़ या मान्य करने की अनुमति देता है । क्लाइंट इनपुट को सहेजते या आउटपुट करते समय वे उपयोगी होते हैं।
HTML एनकोडिंग
htmlspecialchars
किसी भी "HTML विशेष वर्ण" को उनके HTML एन्कोडिंग में परिवर्तित कर देगा, जिसका अर्थ है कि तब उन्हें मानक HTML के रूप में संसाधित नहीं किया जाएगा। इस विधि का उपयोग करके हमारे पिछले उदाहरण को ठीक करने के लिए:
<?php
echo '<div>' . htmlspecialchars($_GET['input']) . '</div>';
// or
echo '<div>' . filter_input(INPUT_GET, 'input', FILTER_SANITIZE_SPECIAL_CHARS) . '</div>';
उत्पादन होगा:
<div><script src="http://example.com/runme.js"></script></div>
<div>
टैग के अंदर सब कुछ ब्राउज़र द्वारा जावास्क्रिप्ट टैग के रूप में व्याख्या नहीं किया जाएगा , बल्कि एक साधारण पाठ नोड के रूप में। उपयोगकर्ता सुरक्षित रूप से देखेगा:
<script src="http://example.com/runme.js"></script>
URL एनकोडिंग
डायनामिक रूप से जेनरेट किए गए URL urlencode
को आउटपुट करते समय, PHP वैध URL को सुरक्षित रूप से आउटपुट करने के लिए फ़ंक्शन प्रदान करता है । इसलिए, उदाहरण के लिए, यदि कोई उपयोगकर्ता उस डेटा को इनपुट करने में सक्षम है जो अन्य GET पैरामीटर का हिस्सा बन जाता है:
<?php
$input = urlencode($_GET['input']);
// or
$input = filter_input(INPUT_GET, 'input', FILTER_SANITIZE_URL);
echo '<a href="http://example.com/page?input="' . $input . '">Link</a>';
किसी भी दुर्भावनापूर्ण इनपुट को एन्कोडेड URL पैरामीटर में बदल दिया जाएगा।
विशेष बाहरी पुस्तकालयों या OWASP AntiSamy सूचियों का उपयोग करना
कभी-कभी आप HTML या अन्य प्रकार के कोड इनपुट भेजना चाहेंगे। आपको अधिकृत शब्दों (श्वेत सूची) और गैर-अधिकृत (ब्लैकलिस्ट) की सूची बनाए रखने की आवश्यकता होगी।
आप OWASP AntiSamy वेबसाइट पर उपलब्ध मानक सूचियों को डाउनलोड कर सकते हैं । प्रत्येक सूची एक विशिष्ट प्रकार के इंटरैक्शन के लिए फिट है (ईबे एपी, स्मॉलमसीई, आदि ...)। और यह खुला स्रोत है।
HTML को फ़िल्टर करने के लिए और सामान्य मामले के लिए XSS हमलों को रोकने के लिए मौजूद लाइब्रेरी हैं और कम से कम एंटीस्माइ सूचियों के साथ बहुत आसान उपयोग करते हैं। उदाहरण के लिए आपके पास HTML शोधक है