SQL インジェクションは、これらのレベルのいわゆるハッカー マスターによって行われてきましたが、現在、ほとんどのハッカー侵入は SQL インジェクションに基づいていることがわかっています。一般的な SQL アンチインジェクション プログラムを作成する場合、一般的な http リクエストは get と post にすぎないため、post 内のすべての不正な文字またはファイル内の get リクエスト内のパラメータ情報をフィルタリングする限り、次のことが可能です。 httpリクエスト情報フィルタリングを実装することでSQLインジェクション攻撃を受けているかどうかを判断します。
IIS によって asp.dll に渡される get 要求は文字列の形式であり、データが Request.QueryString に渡されると、asp パーサーは Request.QueryString の情報を分析し、次に従って各配列の内容を分離します。 "&" データは次のようにインターセプトされます。
まず、リクエストに次の文字を含めることはできないと定義します:
'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate |char|declare
each 文字を「|」で区切って、取得した Request.QueryString を決定します。具体的なコードは次のとおりです。
dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" then
各 SQL_Get In Request.QueryString
SQL_Data=0 の場合、Ubound(SQL_inj) へ
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 then
Response.Write "<Script Language=****>alert('World Movie Alliance SQL Universal Anti-injection System Prompt ↓nn パラメータに不正な文字を含めないで注入してください!'); History.back(- 1)</スクリプト>」
応答.終了
終了する場合
次
次
End If
このように、get リクエストのインジェクション インターセプトを実装しましたが、post リクエストをフィルタリングする必要があるため、引き続き request.form を考慮する必要があります。これも配列の形式で存在するだけです。再度ループ判定を行います。コードは次のとおりです。
If Request.Form<>"" then
Request.Form の各 Sql_Post について
SQL_Data=0 の場合、Ubound(SQL_inj) へ
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 then
Response.Write "<Script Language=****>alert('World Movie Alliance SQL ユニバーサル アンチインジェクション システム プロンプト ↓nn パラメータに不正な文字を含めないで、インジェクトしてください。nnHTTP://www.521movie. com '); 履歴.back(-1)</スクリプト>"
応答.終了
終了する場合
次
次
の場合は終了
します。get および post リクエストの情報インターセプトが実装されています。conn.asp などのデータベース ファイルを開く前にこのページを参照するだけで済みます。再び SQL インジェクションによる攻撃を受けるかどうかを心配することなく、プログラムの開発を続けることができます。そうじゃない?