Heim > Artikel > Backend-Entwicklung > Yii2-XSS-Angriffsverhinderungsstrategie-Beispiel „analysis_php“.
Dieser Artikel beschreibt die XSS-Angriffspräventionsstrategie von Yii2 anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Behebung der XSS-Sicherheitslücke
Grundsatz: Vertrauen Sie den vom Kunden eingegebenen Daten nicht
Hinweis: Der Angriffscode ist nicht unbedingt in 3f1c4e4b6b16bbbd69b2ee476dc4f83a2cacc6d41bbb37262a98f745aa00fbf0
① Markieren Sie wichtige Cookies als nur http, damit die document.cookie-Anweisung in Javascript das Cookie nicht abrufen kann.
② Erlauben Sie Benutzern nur die Eingabe der von uns erwarteten Daten. Beispiel: Im Textfeld „Alter“ dürfen Benutzer nur Zahlen eingeben. Andere Zeichen als Zahlen werden herausgefiltert.
③ HTML-Verschlüsselungsverarbeitung von Daten
④ Filtern oder entfernen Sie spezielle HTML-Tags, wie zum Beispiel: script, iframe, 459b51adace91916c0791e80da61357a, "
⑤ Filtern Sie JavaScript-Ereignis-Tags. Zum Beispiel „onclick=", „onfocus" usw.
XSS-Prävention bei Yii
<?php echo CHtml::encode($user->name) ?>
/** * 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); }
http://php.net/manual/zh/function.htmlspecialchars.php
http://php.net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.php
Beschreibung des Konstantennamens
ENT_COMPAT Konvertiert doppelte Anführungszeichen und lässt einfache Anführungszeichen in Ruhe.
ENT_QUOTES Konvertiert sowohl doppelte als auch einfache Anführungszeichen.
ENT_NOQUOTES Belässt sowohl doppelte als auch einfache Anführungszeichen unkonvertiert.
ENT_IGNORE Es wird davon abgeraten, ungültige Codeeinheitensequenzen stillschweigend zu verwerfen, anstatt eine leere Zeichenfolge zurückzugeben, da dies Auswirkungen auf die Sicherheit haben kann.
ENT_SUBSTITUTE Ersetzen Sie ungültige Codeeinheitensequenzen durch ein Unicode-Ersatzzeichen U FFFD (UTF-8) oder FFFD; (andernfalls), anstatt eine leere Zeichenfolge zurückzugeben.
ENT_DISALLOWED Ersetzen Sie ungültige Codepunkte für den angegebenen Dokumenttyp durch ein Unicode-Ersatzzeichen U FFFD (UTF-8) oder FFFD;, anstatt sie unverändert zu lassen. Formalität von XML-Dokumenten mit eingebetteten externen Inhalten.
ENT_HTML401 Code als HTML 4.01 behandeln.
ENT_XML1 Behandeln Sie Code als XML 1.
ENT_XHTML Code als XHTML behandeln.
ENT_HTML5 Code als HTML 5 behandeln.
htmlspecialchars
Sonderzeichen in HTML-Entitäten umwandeln
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
& (kaufmännisches Und) wird zu &
„ (doppelte Anführungszeichen) wird zu „, wenn ENT_NOQUOTES nicht festgelegt ist.
' (einfaches Anführungszeichen) wird nur dann zu ' (oder '), wenn ENT_QUOTES festgelegt ist.
2fbbbdecae71a8e515e8fd54f05e2804 (größer als) wird zu >
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?>
htmlentities
Konvertieren Sie alle anwendbaren Zeichen in HTML-Entitäten
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
<?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); ?>
URL-Code
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=���ֺ���&rsv_bp=0&rsv_spt=3&inputT=7477
Alle nicht alphanumerischen Zeichen in dieser Zeichenfolge außer -_ werden durch ein Prozentzeichen (%) gefolgt von zwei hexadezimalen Ziffern ersetzt und Leerzeichen werden als Pluszeichen ( ) codiert. 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 echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
<?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">'; ?>
Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Yii-Framework hilfreich sein wird.