「PHP開発者のAPP 009インタフェースの戦闘」SQLとXSS攻撃の防止、日常のセキュリティ

アンチSQLインジェクションやXSS攻撃の一般的なフィルタ

  1. まず、  /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 [ $キー ] = にhtmlentitiesstrip_tags$値)); //HTMLタグやPHPやHTMLエンティティに変換するの除去 
            } { 
                セルフ ::フィルタ($ paramsは [ $キー]); 
            } 
        } 
    } 
}

この機能は、主に達成されています。

  1. 機能使用してaddslashes()、バックスラッシュ(\)とNUL(NULL文字)を単一引用符(「)に、二重引用符(「)をバックスラッシュ予防SQLインジェクションを免れました。
  2. 削除非印字文字、ラフフィルタXSS不審な文字列。このデモプログラムなので、何のスクリプトは、直接、いくつかの不正な文字列スクリプト、直接削除するには、ユーザーの入力データを必要としません。
  3. HTMLおよびPHPタグを削除し、HTMLエンティティに変換します

  1. では  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

  1. では  BaseController 、中央、initialize() コール initializeParams()
        // 初期化要求パラメータ(XSS攻撃注入と共通フィルタ)
        $この - > initializeParams();
  1. まだ  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リンク
出典:ジェーンの本は
、著者が著作権を保有しています。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

おすすめ

転載: www.cnblogs.com/yehuisir/p/12000288.html