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
各文字は「|」で区切られ、取得される 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)</スクリプト>」
応答.終了
終了する場合
次
次
終了の場合
このようにして、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 Universal Anti-injection System Prompt ↓nn パラメータに不正な文字を含めないで、挿入してください。nnHTTP: //www.521movie. com '); 履歴.back(-1)</スクリプト>"
応答.終了
終了する場合
次
次
終了する場合
これで、get リクエストと post リクエストの情報インターセプトが実装されました。conn.asp などのデータベース ファイルを開く前に、このページを参照するだけで済みます。再び SQL インジェクションによる攻撃を受けるかどうかを心配することなく、プログラムの開発を続けることができます。そうじゃない?