Methodenanalyse der XSS-Angriffspräventionsstrategie von Yii2

不言
Freigeben: 2023-04-01 13:34:02
Original
2140 Leute haben es durchsucht

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) ?>
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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 konvertieren

string htmlspecialchars ( 
      string $string 
      [, int $flags = ENT_COMPAT | ENT_HTML401 
      [, string $encoding = ini_get("default_charset") 
      [, bool $double_encode = true ]
    ]
  ] 
)
Nach dem Login kopieren

Die durchgeführten Übersetzungen sind:

& (kaufmännisches Und) wird zu &

" (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=&#39;test&#39;>Test</a>", ENT_QUOTES);
echo $new; // <a href=&#39;test&#39;>Test</a>
?>
Nach dem Login kopieren

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 ]
    ]
  ] 
)
Nach dem Login kopieren

<?php
$str = "A &#39;quote&#39; is <b>bold</b>";
// Outputs: A &#39;quote&#39; is <b>bold</b>
echo htmlentities($str);
// Outputs: A &#39;quote&#39; is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
Nach dem Login kopieren

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 zu

http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477

Also Die genannte 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
echo &#39;<a href="mycgi?foo=&#39;, urlencode($userinput), &#39;">&#39;;
?>
Nach dem Login kopieren

<?php
$query_string = &#39;foo=&#39; . urlencode($foo) . &#39;&bar=&#39; . urlencode($bar);
echo &#39;<a href="mycgi?&#39; . htmlentities($query_string) . &#39;">&#39;;
?>
Nach dem Login kopieren

Das Obige ist hoffentlich der gesamte Inhalt dieses Artikels Sie können daraus lernen. Bitte beachten Sie die chinesische PHP-Website für weitere verwandte Inhalte!

Verwandte Empfehlungen:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage