ホームページ >PHPフレームワーク >ThinkPHP >thinkphp が SQL インジェクションを防ぐ方法
#thinkphp はどのようにして SQL インジェクションを防ぐのでしょうか?
Web アプリケーションの場合、SQL インジェクション攻撃が防止すべき主要なセキュリティ問題であることは間違いありません。システムの最下層では、次のようなデータ セキュリティのための多くの処理と対応する防止メカニズムが実行されています。 #$User = M("User"); // 实例化User对象 $User->find($_GET["id"]);
ユーザーが悪意のある ID パラメーターを入力した場合でも、システムは悪意のあるインジェクションを回避するために整数への変換を強制します。これは、システムがデータに対して必須のデータ型検出を実行し、データ ソースに対してデータ形式変換を実行するためです。さらに、文字列型データの場合、ThinkPHP は、escape_string 処理 (real_escape_string、mysql_escape_string) を実行し、パラメーター バインディングもサポートします。
通常のセキュリティ リスクは、クエリ条件で文字列パラメータが使用されており、変数の一部がクライアントからのユーザー入力に依存していることです。
SQL インジェクションの問題を効果的に防止するには、次のことをお勧めします:
# より安全な方法であるクエリ条件に配列を使用するようにしてください。
# 次の場合は配列を使用する必要があります。 have to 文字列クエリ条件の場合は、前処理メカニズムを使用します。
# 自動検証およびオートコンプリート メカニズムを使用して、アプリケーション固有のフィルタリングをカスタマイズします。
##● 環境が許せば、PDO の使用を試してください。そしてパラメータバインディングを使用します。クエリ条件の前処理
where メソッドで文字列条件を使用する場合、前処理 (セキュリティ フィルタリング) がサポートされ、前処理パラメータを渡す 2 つの方法がサポートされます。例:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select(); // 或者 $Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();モデルのクエリ メソッドと実行メソッドも前処理メカニズムをサポートしています。例:
$model->query('select * from user where id=%d and status=%d',$id,$status); //或者 $model->query('select * from user where id=%d and status=%d',array($id,$status));実行メソッドはクエリ メソッドと同じように使用されます。 この記事は、ThinkPHP フレームワークの技術記事コラムからのものです:
http://www.php.cn/phpkj/thinkphp/
以上がthinkphp が SQL インジェクションを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。