これは、PHP と SQL を組み合わせた包括的なアンチインジェクション プログラムです。PHP では主に get、post、cooke、file をフィルタリングし、SQL では削除および更新のクエリ コマンドを検出およびフィルタリングします。
SQLインジェクション攻撃の一般的な考え方
· SQL インジェクションの場所を検出します。
·バックグラウンドデータベースのタイプを決定します。
·XP_CMDSHELLの実行可能性を判断する
·WEB仮想ディレクトリを発見する
·ASP、php、jsp トロイの木馬をアップロードします。
·管理者権限を取得します;
//PHP サイト全体のアンチインジェクション プログラム、このファイルをパブリック ファイルに require_once する必要があります
//magic_quotes_gpc ステータスを決定します
if (@get_magic_quotes_gpc ()) { | |||||||||
// 配列の場合は、配列を走査して再帰的に呼び出します if (is_array ( $array )) { foreach ( $array as $k => $v ) { $array [$k] = 秒 ( $v ); } } else if (is_string ( $array )) { //addslashes関数を使って処理します $array = ラッシュを追加します ( $array ); } else if (is_numeric ( $array )) { $array = 整数 ( $array ); } $配列を返す } 1.整数パラメータの判定 入力パラメータ YY が整数の場合、通常、abc.asp 内の元の SQL ステートメントはおおよそ次のようになります: select * from table name where field=YY なので、次の手順を使用して SQL インジェクションが存在するかどうかをテストできます。 ①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(シングルクォーテーション付き) このとき、abc.ASP内のSQL文は となります。 select * from table name where field=YY’、abc.asp が異常実行します ②HTTP://xxx.xxx.xxx/abc.asp?p=YY かつ 1=1 の場合、abc.asp は正常に実行され、結果は HTTP://xxx.xxx.xxx/abc.asp?p と同じになります。 =YY ; ③HTTP://xxx.xxx.xxx/abc.asp?p=YY で 1=2、abc.asp が異常動作します。 上記の 3 つの手順が完全に満たされている場合は、abc.asp に SQL インジェクションの脆弱性が存在するはずです。 上記に基づいて、整数フィルター関数を作成します コードは次のとおりです
die ( 'パラメータを空にすることはできません!' ); } //空かどうかを判断する else if (inject_check ( $id )) {
www.bkjia.com 声明: この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。 前の記事:php SQL インジェクションと anti-injection_PHP チュートリアルの古典的なケース分析次の記事:php SQL インジェクションと anti-injection_PHP チュートリアルの古典的なケース分析 関連記事続きを見る |