この記事では、Yii2 の XSS 攻撃防止戦略を主に紹介します。XSS 攻撃の原理とそれに対応する Yii2 の防止戦略について詳しく説明します。
この記事では、Yii2 の XSS 攻撃防止戦略について説明します。 Yii2 XSS 攻撃防止戦略の例。参考までに皆さんと共有してください。詳細は次のとおりです:
XSS 脆弱性修復
原則: 顧客が入力したデータを信じないでください
注: 攻撃コードは必ずしも < ;script>2cacc6d41bbb37262a98f745aa00fbf0にあるとは限りません。
①重要な Cookie を http のみとしてマークし、JavaScript の document.cookie ステートメントが Cookie を取得できないようにします。
②のみユーザーが予想されるデータを入力できるようにします。例: 年齢テキストボックスでは、ユーザーは数字のみを入力できます。数字以外の文字は除外されます。
③ データの Html エンコード処理
④ script、iframe、9ccf9f0b98b6fb28c4149a02b4881055、" などの特殊な Html タグをフィルタリングまたは削除します。
⑤ JavaScript イベントのタグをフィルタリングします。 。たとえば、「onclick=」、「onfocus」などです。
Yii での XSS 防止
<?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); }
htmlspecialchars & htmlentities & urlencode 3 つの違い:
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
利用可能なフラグ定数
定数名説明
ENT_COMPAT 二重引用符は変換され、一重引用符はそのままになります。
ENT_QUOTES 二重引用符と一重引用符の両方が変換されます。
ENT_NOQUOTES 二重引用符と一重引用符は両方とも変換されないままになります。
ENT_IGNORE 無効なコードをサイレントに破棄します。空の文字列を返すのではなく、ユニット シーケンスを返します。セキュリティに影響を与える可能性があるため、このフラグの使用は推奨されません。
ENT_SUBSTITUTE 代わりに、無効なコード ユニット シーケンスを Unicode 置換文字 U FFFD (UTF-8) または FFFD (それ以外の場合) に置き換えます。
ENT_DISALLOWED 指定されたドキュメント タイプの無効なコード ポイントをそのままにするのではなく、Unicode 置換文字 U FFFD (UTF-8) または FFFD (それ以外の場合) に置き換えます。
ENT_HTML401 コードを HTML 4.01 として処理します。
ENT_XML1 コードを XML 1 として処理します。
ENT_XHTML コードを XHTML として処理します。
ENT_HTML5 ハンドルコードを HTML 5 として記述します。
htmlspecialchars
特殊文字を HTML エンティティに変換します
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
実行される変換は次のとおりです。 ENT_NOQUOTES が設定されていない場合、
& (アンパサンド) は &
" (二重引用符) になります。 ENT_QUOTES が設定されている場合のみ、
' (一重引用符) は ' (または ') になります。 set .
2c6d73791052a5ace03f32b371dacc3f (より大きい) は >
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?>
htmlentities
該当するすべての文字を HTML エンティティに変換します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); ?>urlencode
URL エンコードは URL 仕様に準拠します。標準の URL 仕様では、中国語や多くの文字を URL に使用することは許可されていないためです。
たとえば、Baidu で「中国語のテスト」を検索します。 URL は
http://www.baidu.com/s?wd=���������&rsv_bp=0&rsv_spt=3&inputT=7477
いわゆる URL エンコーディングは次のとおりです。文字以外のすべての文字 数字はパーセント記号 (%) とそれに続く 2 つの 16 進数に置き換えられ、スペースはプラス記号 () としてエンコードされます。
<?php echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
<?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">'; ?>
上記がこの記事の全内容です。誰もが学ぶのに役立ちます。さらに関連したコンテンツについては、PHP 中国語 Web サイトに注目してください。
関連する推奨事項:
Yii キャッシュ クリーンアップの実装方法Yii2 で転送されるルーティング リンクに対処する方法。 0 基本コードは正義です以上がYii2 の XSS 攻撃防御戦略の手法分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。