यह मानते हुए (जैसे <body>
और </body>
या </div>
के बीच <div>
और के बीच के रूप में) HTML सामग्री में डाल दिया जा रहा है, आप 5 विशेष एक्सएमएल वर्ण (&, < सांकेतिक शब्दों में बदलना करने की जरूरत है, >, ", '), और OWASP स्लैश (/) के साथ-साथ पीएचपी निर्मित, htmlentities()
आप के लिए पहले भाग करना होगा, और एक सरल str_replace()
स्लेश कर सकते हैं सहित सिफारिश की गई है:।
function makeHTMLSafe($string) {
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
$string = str_replace('/', '/', $string);
return $string;
}
यदि, हालांकि, आप href=
<a
के खंड को href=
क्लॉज जैसे टेंट किए गए मान को डालने जा रहे हैं, तो आपको वर्णों के एक अलग सेट को एन्कोड करने की आवश्यकता होगी ([space]% * + , - /; < =>^और |) और आप दोहरे-उद्धरण अपने HTML गुण होना चाहिए:
function makeHTMLAttributeSafe($string) {
$scaryCharacters = array(32, 37, 42, 43, 44, 45, 47, 59, 60, 61, 62, 94, 124);
$translationTable = array();
foreach ($scaryCharacters as $num) {
$hex = str_pad(dechex($num), 2, '0', STR_PAD_LEFT);
$translationTable[chr($num)] = '&#x' . $hex . ';';
}
$string = strtr($string, $translationTable);
return $string;
}
अंतिम चिंता अवैध UTF-8 है वर्ण-जब कुछ ब्राउज़रों के लिए भेजा जाए, तो बीमार का गठन UTF-8 बाइट क्रम एक HTML इकाई से बाहर तोड़ सकते हैं। इस के खिलाफ की रक्षा के लिए, बस सुनिश्चित करें कि सभी UTF-8 वर्ण आपको मिल मान्य हैं:
function assertValidUTF8($string) {
if (strlen($string) AND !preg_match('/^.{1}/us', $string)) {
die;
}
return $string;
}
कि नियमित अभिव्यक्ति पर u
संशोधक यह एक यूनिकोड मिलान regex बनाता है। एक एकल chararchter, .
से मिलान करके, हमें आश्वासन दिया जाता है कि पूरी स्ट्रिंग मान्य यूनिकोड है।
चूंकि यह सभी संदर्भ-निर्भर है, इसलिए नवीनतम संभव पल में इस एन्कोडिंग को करने के लिए सबसे अच्छा है-बस उपयोगकर्ता को आउटपुट प्रस्तुत करने से पहले। इस अभ्यास में होने से आपके द्वारा याद किए गए किसी भी स्थान को देखना आसान हो जाता है।
OWASP उनके XSS prevention cheat sheet पर बहुत सारी जानकारी प्रदान करता है।
सुनिश्चित करें और SQL इंजेक्शन से बचने के लिए तैयार कथन का उपयोग करें। http://php.net/manual/en/pdo.prepared-statements.php –