Heim  >  Artikel  >  Backend-Entwicklung  >  Yii2-XSS-Angriffsverhinderungsstrategie-Beispiel „analysis_php“.

Yii2-XSS-Angriffsverhinderungsstrategie-Beispiel „analysis_php“.

WBOY
WBOYOriginal
2016-08-17 13:02:331192Durchsuche

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

<&#63;php echo CHtml::encode($user->name) &#63;>

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

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 ]
    ]
  ] 
)

Die durchgeführten Übersetzungen sind:

& (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 >

<&#63;php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href=&#039;test&#039;>Test</a>
&#63;>

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 ]
    ]
  ] 
)

<&#63;php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A &#039;quote&#039; is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
&#63;>

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

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 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.

<&#63;php
echo '<a href="mycgi&#63;foo=', urlencode($userinput), '">';
&#63;>

<&#63;php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi&#63;' . htmlentities($query_string) . '">';
&#63;>

Leser, die an mehr Yii-bezogenen Inhalten interessiert sind, können sich die speziellen Themen dieser Website ansehen: „Einführung in das Yii-Framework und Zusammenfassung gängiger Techniken“, „Zusammenfassung des ausgezeichneten PHP-Entwicklungsframeworks“, „Grundlegendes Tutorial für den Einstieg“. mit Smarty-Vorlagen“, „Einführungs-Tutorial zum objektorientierten PHP-Programmierung-Design“, „Zusammenfassung der PHP-String-(String-)Verwendung“, „Einführungs-Tutorial zum PHP-MySQL-Datenbankbetrieb“ und „Zusammenfassung allgemeiner PHP-Datenbankbetriebsfähigkeiten“

Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Yii-Framework hilfreich sein wird.

Stellungnahme:
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