In diesem Artikel wird hauptsächlich die XSS-Angriffspräventionsstrategie von Yii2 vorgestellt. Er analysiert das Prinzip des XSS-Angriffs und die entsprechende Präventionsstrategie von Yii2. Freunde in Not können sich darauf beziehen.
Dieser Artikel beschreibt Beispiel für Strategien zur Verhinderung von Yii2-XSS-Angriffen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:
Reparatur von XSS-Schwachstellen
Grundsatz: Vertrauen Sie den vom Kunden eingegebenen Daten nicht
Hinweis : Der Angriffscode ist nicht unbedingt in < ;script>
① Markieren Sie wichtige Cookies nur als http, damit die document.cookie-Anweisung in Javascript das Cookie nicht abrufen kann.
② Nur Erlauben Sie Benutzern, die von uns erwarteten Daten einzugeben. 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, < für <, " für
⑤ Filtern Sie JavaScript-Ereignisbezeichnungen. Zum Beispiel „onclick=", „onfocus" usw.
XSS-Prävention bei Yii
<?php echo CHtml::encode($user->name) ?>
Quellcode dieser Methode:
/** * 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); }
Der Unterschied zwischen htmlspecialchars & htmlentities & urlencode:
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
Verfügbare Flag-Konstanten
Konstantenname Beschreibung
ENT_COMPAT Wandelt doppelte Anführungszeichen um und lässt einfache Anführungszeichen in Ruhe.
ENT_QUOTES Wandelt sowohl doppelte als auch einfache Anführungszeichen um.
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 ungültige Codeeinheitensequenzen durch ein Unicode-Ersatzzeichen U+FFFD (UTF-8) oder FFFD (ansonsten). Gibt eine leere Zeichenfolge zurück.
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 B. um 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 5 .
htmlspecialchars
Sonderzeichen in HTML-Entitäten konvertierenstring htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
" (doppeltes Anführungszeichen) wird zu ", wenn ENT_NOQUOTES nicht festgelegt ist.
' (einfaches Anführungszeichen) wird nur dann zu ' (oder '), wenn ENT_QUOTES festgelegt ist.
< (kleiner als) wird zu <
> (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ätenstring 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); ?>
urlencode
URL-Codierung muss der URL-Spezifikation 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 zuhttp://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
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 echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
<?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">'; ?>
So implementieren Sie die Yii-Cache-Bereinigung
So gehen Sie mit weitergeleiteten Routing-Links in Yii2 um. 0 Grundlegende Codegerechtigkeit
Das obige ist der detaillierte Inhalt vonMethodenanalyse der XSS-Angriffspräventionsstrategie von Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!