Dieser Artikel beschreibt die XSS-Angriffspräventionsstrategie von Yii2 anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Reparatur von XSS-Schwachstellen
Grundsatz: Den vom Kunden eingegebenen Daten nicht vertrauen
Hinweis: Der Angriffscode ist nicht unbedingt in 3f1c4e4b6b16bbbd69b2ee476dc4f83a4c28f382be9c1f2b73aa7b7aacbd73ce Markieren Sie wichtige Cookies nur als http, damit die document.cookie-Anweisung in Javascript das Cookie nicht abrufen kann.
② Erlauben Sie Benutzern nur die Eingabe Daten, die wir erwarten. Beispiel: Im Textfeld „Alter“ dürfen Benutzer nur Zahlen eingeben. Andere Zeichen als Zahlen werden herausgefiltert.
③ HTML-Kodierungsverarbeitung von Daten
④ Filtern oder entfernen Sie spezielle HTML-Tags, wie zum Beispiel: script, iframe, becf6a6438ca278ebdafb803bbef3040, " für
⑤ Filtern Sie JavaScript-Ereignis-Tags. Zum Beispiel „onclick=", „onfocus" und so weiter.
XSS-Prävention in Yii
<?php echo CHtml::encode($user->name) ?>
Quellcode:
/** * Encodes special characters into HTML entities. * The [[\yii\base\Application::charset|application charset]] will be used for encoding. * @param string $content the content to be encoded * @param boolean $doubleEncode whether to encode HTML entities in `$content`. If false, * HTML entities in `$content` will not be further encoded. * @return string the encoded content * @see decode() * @see http://www.php.net/manual/en/function.htmlspecialchars.php */ public static function encode($content, $doubleEncode = true) { return htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, Yii::$app->charset, $doubleEncode); }
htmlspecialchars & htmlentities & urlencode Der Unterschied zwischen den dreien:
http://php.net/manual/zh /function.htmlspecialchars.php
http://php .net/manual/zh/function.htmlentities.phphttp://cn2.php.net/manual/zh/function.urlencode.php
Verfügbare Flag-Konstanten
Beschreibung des Konstantennamens
ENT_COMPAT Wandelt doppelte Anführungszeichen um und lässt einfache Anführungszeichen in Ruhe.
ENT_NOQUOTES Lässt sowohl doppelte als auch einfache Anführungszeichen unkonvertiert.
ENT_IGNORE Verwirft ungültige Codeeinheitensequenzen stillschweigend Von der Verwendung dieses Flags wird abgeraten, da es Auswirkungen auf die Sicherheit haben kann.
ENT_SUBSTITUTE Ersetzen Sie stattdessen ungültige Code-Einheitensequenzen durch ein Unicode-Ersatzzeichen U+ FFFD (UTF-8) oder FFFD; der Rückgabe einer leeren Zeichenfolge.
ENT_DISALLOWED Ersetzen Sie ungültige Codepunkte für den angegebenen Dokumenttyp durch ein Unicode-Ersatzzeichen U+FFFD (UTF-8) oder FFFD; (andernfalls), anstatt sie unverändert zu lassen nützlich, um beispielsweise die Wohlgeformtheit von XML-Dokumenten mit eingebetteten externen Inhalten sicherzustellen.
ENT_HTML401 Behandeln Sie Code als HTML 4.01.
ENT_XML1 Behandeln Sie Code als XML 1.
ENT_XHTML Behandeln Sie Code als XHTML >
Die durchgeführten Übersetzungen sind:
" (doppeltes Anführungszeichen) wird zu ", wenn ENT_NOQUOTES nicht festgelegt ist.
' (einfaches Anführungszeichen). quote) wird nur dann zu ' (oder '), wenn ENT_QUOTES gesetzt ist.618474613d03b6b5aeef1d7f5105f01e (größer als) wird zu >
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
htmlentities
Alle anwendbaren Zeichen in HTML-Entitäten konvertieren
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?>urlencode
Die URL-Kodierung muss den URL-Spezifikationen entsprechen. Denn in der Standard-URL-Spezifikation dürfen Chinesisch und viele Zeichen nicht in der URL vorkommen. Suchen Sie beispielsweise in Baidu nach „chinesische Schriftzeichen testen“. Die URL wird zu
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )Also Die sogenannte URL-Kodierung lautet: Alle nicht alphanumerischen Zeichen werden durch ein Prozentzeichen (%) gefolgt von zwei hexadezimalen Ziffern ersetzt, und Leerzeichen werden als Pluszeichen (+) kodiert.
Alle nicht alphanumerischen Zeichen Zeichen werden durch ein Prozentzeichen (%) gefolgt von zwei hexadezimalen Ziffern ersetzt und Leerzeichen werden als Pluszeichen (+) kodiert. Diese Kodierung ist dieselbe wie die Kodierung von WWW-Formular-POST-Daten und dieselbe Kodierung wie der Medientyp application/x-www-form-urlencoded. Aus historischen Gründen unterscheidet sich diese Kodierung von der RFC1738-Kodierung (siehe rawurlencode()) darin, dass Leerzeichen als Pluszeichen (+) kodiert werden.
<?php $str = "A 'quote' is <b>bold</b>"; // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str); // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str, ENT_QUOTES); ?>
Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Yii-Framework hilfreich sein wird.
Weitere Artikel zur Analyse der XSS-Angriffspräventionsstrategie von Yii2 finden Sie auf der chinesischen PHP-Website!