PHP में सबसे अच्छा XSS फिल्टर है:
htmlspecialchars($_POST['param'],ENT_QUOTES);
कारण है कि आप भी उद्धरण सांकेतिक शब्दों में बदलना करने के लिए है क्योंकि आप> < की जरूरत नहीं है फायदा उठाने के लिए कुछ XSS है। उदाहरण के लिए इस XSS की चपेट में है:
$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';
ENT_QUOTES: आप < की जरूरत नहीं है> इस मामले में जावास्क्रिप्ट निष्पादित करने के लिए है क्योंकि आप onmouseover उपयोग कर सकते हैं
print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>');
, यहां एक उदाहरण हमला है डबल कोट्स का ख्याल रखता है।
ई-मेल थोड़ा अलग है, जावास्क्रिप्ट मेल क्लाइंट द्वारा निष्पादित नहीं किया जाना चाहिए, और यदि ऐसा है तो आपकी साइट समान उत्पत्ति नीति के कारण प्रभावित नहीं होती है। लेकिन सुरक्षित पक्ष पर रहने के लिए मैं अभी भी htmlspecialchars($var,ENT_QUOTES);
का उपयोग करूंगा। फिर भी, PHP का मेल() फ़ंक्शन एक अलग प्रकार की भेद्यता के लिए मर सकता है, जिसे सीआरएलएफ इंजेक्शन कहा जाता है। PHP-Nuke के खिलाफ एक उदाहरण भेद्यता यहां दी गई है। यदि आपके पास फ़ंक्शन कॉल है: mail($fmail, $subject, $message, $header);
फिर आपको यह सुनिश्चित करना होगा कि कोई उपयोगकर्ता \r\n
$ हेडर में इंजेक्ट नहीं कर सकता है।
कमजोर कोड:
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
समझौता:
$_GET[name]=str_replace(array("\r","\n"),$_GET[name]);
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
इस तरह के "छेद" को खोजने के लिए किसी भी स्वचालित परीक्षण है? – Kirzilla
आपका दिमाग, और आपके हाथ। लेकिन अगर आप Google के आस-पास कुछ हैं, तो http://www.acunetix.com/ से एक अच्छा है (लेकिन मेरा दिमाग बेहतर है) लेकिन यह मुफ़्त नहीं है। –
Acunetix द्वारा मुफ्त xss स्कैनर का उपयोग करें: http://www.acunetix.com/cross-site-scripting/scanner.htm यह अजीब प्रकार के xss के लिए परीक्षण करेगा, जैसा कि मेरे उदाहरण में से एक है। – rook