アンチSQLインジェクションやXSS攻撃の一般的なフィルタ
- まず、
/app/library/
ディレクトリの作成Security.php
、ファイルを次のコードを追加します。
<?PHP / * * * *アンチSQLインジェクションやXSS攻撃の一般的なフィルター * / クラスのセキュリティ { パブリック 静的の 関数フィルタ(&$のparams ) { IF(!IS_ARRAY($ paramsは{)) のリターン; } $パターン'/ ONUNLOAD / I' ]; foreachの($のparams として $キー => $値){ 場合(!IS_ARRAY($値)){ // magic_quotes_gpcの文字をエスケープしていないが、二重エスケープを避けるためにaddslashes()を使用します。 IF(!関数get_magic_quotes_gpc {()) $値 = にaddslashes($値); // バックスラッシュでトランスフェクトされた単一引用符(「)、二重引用符(「)、バックスラッシュ(\)とNUL(NULL文字)について李 } $値 = にpreg_replace($パターン、 ''、$値); // 非印刷文字を削除し、文字列の総フィルターXSS不審 $のparams [ $キー ] = にhtmlentities(strip_tags($値)); //HTMLタグやPHPやHTMLエンティティに変換するの除去 } 他{ セルフ ::フィルタ($ paramsは [ $キー]); } } } }
この機能は、主に達成されています。
- 機能使用して
addslashes()
、バックスラッシュ(\)とNUL(NULL文字)を単一引用符(「)に、二重引用符(「)をバックスラッシュ予防SQLインジェクションを免れました。 - 削除非印字文字、ラフフィルタXSS不審な文字列。このデモプログラムなので、何のスクリプトは、直接、いくつかの不正な文字列スクリプト、直接削除するには、ユーザーの入力データを必要としません。
- HTMLおよびPHPタグを削除し、HTMLエンティティに変換します
- では
BaseController
2つのプライベート変数の定義$_get_params
と$_post_params
保存のための濾過後。機能要求パラメータの初期化と追加initializeParams()
:
/ * * *初期化要求パラメータ(インジェクションとXSS攻撃防止共通フィルタ) * / プライベート 関数initializeParams() { $この - > _ get_params = $この - >要求- > getQuery(); セキュリティ ::フィルタ($この - > _get_params); IF($この - >要求- > isPost()){ $この - > _ post_params = $この - >要求- > でgetPost(); セキュリティ ::フィルタ($この - > _post_params); } }
要求パラメータを濾過に格納されている
$_get_params
と$_post_params
。
- では
BaseController
、中央、initialize()
コールinitializeParams()
// 初期化要求パラメータ(XSS攻撃注入と共通フィルタ) $この - > initializeParams();
- まだ
BaseController
2つの読み取りGETとPOSTの機能パラメータを追加しました。
/ * * *ゲットするリクエストパラメータ(フィルタリング)が @paramヌル$ Keyパラメータ名が指定されていない*、フォームは全てのGETリクエストパラメータの配列を返します @return配列を* |ミックス|ヌル * / パブリック 関数 GET($キー = nullを) { IF($キー){ 戻り ISSET($この - > _ get_params [ $キー ])?$この - > _ get_params [ $キー ]:NULL ; } 戻り $この - > _get_params; } / * * *取得要求POSTリクエストパラメータ(フィルタ) * @Paramヌル$ keyパラメータ名が指定されていない、配列はすべてのPOSTリクエストのパラメータが返されます * @return配列|混合|ヌル * / パブリック 関数でgetPost($キー = nullの) { 場合($キー){ リターン ISSET($この - > _ post_params [ $キー ])?これを$ - > _ post_params [ $キー ]:ヌル; } を返す $これを - > _post_params。 }
全て継承 BaseController
コントローラ、使用することができる $this->get()
と $this->getPost()
安全要求パラメータを読み取ること。
防ぎ偽造セッション
使用しているため
Token
、データベースのセクションに関連した認証のため、我々は、メンバーシップシステム開発の後半で説明します。
防止悪意のあるアクセス
ので
transaction_id
キャッシュが関与していると繰り返し抗アクセスインターフェイスは非常に大きな需要がありませんが、彼らが実現する方法を説明していません。
サンプルコードのダウンロード
リンク:https://pan.baidu.com/s/1d1mOFkパスワード:uypl
著者:心の概念図
します。https://www.jianshu.com/p/778ba15c786eリンク
出典:ジェーンの本は
、著者が著作権を保有しています。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。