この記事では、Yii2 の XSS 攻撃防止戦略を例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
XSS脆弱性修正
原則: 顧客が入力したデータを信頼しないでください
注: 攻撃コードは必ずしも <script></script> にあるとは限りません
① 重要な Cookie を http のみとしてマークし、JavaScript の document.cookie ステートメントが Cookie を取得できないようにします。
② 私たちが期待するデータのみをユーザーに入力させます。 例: 年齢テキストボックスでは、ユーザーは数字のみを入力できます。 数字以外の文字は除外されます。
③ データに対してHTMLエンコード処理を行う
④ 特殊な HTML タグ(script、iframe、<、>、" など)をフィルタリングまたは削除します。
⑤ JavaScriptのイベントタグをフィルタリングします。たとえば、「onclick=」、「onfocus」などです。
リーリー
リーリー
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; (それ以外の場合) に置き換えます。これは、たとえば、ウェルを確保する場合に便利です。 - 外部コンテンツが埋め込まれた XML ドキュメントの形式。
ENT_HTML401 コードを HTML 4.01 として処理します
ENT_XML1 コードを XML 1 として処理します。
ENT_XHTML コードを XHTML として処理します。
ENT_HTML5 コードを HTML 5 として処理します。
html特殊文字
特殊文字を HTML エンティティに変換する
リーリー実行された翻訳は次のとおりです:
になります ENT_NOQUOTESが設定されていない場合、「(ダブルクォーテーション)は」となります
' (一重引用符) は、ENT_QUOTES が設定されている場合のみ ' (または ') になります。
< (未満) は <
> (より大きい) は >
になります
リーリー
該当するすべての文字を HTML エンティティに変換します
リーリーリーリー
URLエンコードはURL仕様に準拠します。標準の URL 仕様では、中国語や多くの文字を URL に使用することは許可されていないためです。
たとえば、Baidu で「漢字テスト」を検索します。 URLはになります http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
いわゆる URL エンコードは次のとおりです: 英数字以外の文字はすべてパーセント記号 (%) に置き換えられ、その後に 2 つの 16 進数が続き、スペースはプラス記号 (+) としてエンコードされます
この文字列内の -_ を除くすべての非英数字は、パーセント記号 (%) とそれに続く 2 つの 16 進数に置き換えられ、スペースはプラス記号 (+) としてエンコードされます。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコーディングは、スペースをプラス記号 (+) としてエンコーディングする点で、RFC1738 エンコーディング (rawurlencode() を参照) とは異なります。
リーリー