ホームページ  >  記事  >  バックエンド開発  >  Yii2 XSS 攻撃防止戦略の分析_php の例

Yii2 XSS 攻撃防止戦略の分析_php の例

WBOY
WBOYオリジナル
2016-08-17 13:02:331144ブラウズ

この記事では、Yii2 の XSS 攻撃防止戦略を例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

XSS脆弱性修正

原則: 顧客が入力したデータを信頼しないでください
注: 攻撃コードは必ずしも <script></script> にあるとは限りません

① 重要な Cookie を http のみとしてマークし、JavaScript の document.cookie ステートメントが Cookie を取得できないようにします。 ② 私たちが期待するデータのみをユーザーに入力させます。 例: 年齢テキストボックスでは、ユーザーは数字のみを入力できます。 数字以外の文字は除外されます。
③ データに対してHTMLエンコード処理を行う
④ 特殊な HTML タグ(script、iframe、<、>、" など)をフィルタリングまたは削除します。 ⑤ JavaScriptのイベントタグをフィルタリングします。たとえば、「onclick=」、「onfocus」などです。

Yii での XSS 防止

リーリー

このメソッドのソースコード:

リーリー

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

利用可能なフラグ定数

定数名の説明

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エンティティ

該当するすべての文字を HTML エンティティに変換します

リーリー

リーリー
URLコード

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() を参照) とは異なります。

リーリー

リーリー
さらに Yii 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください: 「Yii フレームワークの概要と一般的なテクニックの概要」、「優れた PHP 開発フレームワークの概要」、「Smarty を始めるための基本チュートリアル」テンプレート』、『PHPオブジェクト指向プログラミング入門チュートリアル』、『php文字列の使い方まとめ』、『php+mysqlデータベース操作入門チュートリアル』、『php共通データベース操作スキルまとめ』
この記事が皆さんの Yii フレームワークに基づく PHP プログラムの設計に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。