SQL インジェクション攻撃とは、設計の脆弱性を悪用してターゲット サーバー上で SQL コマンドを実行し、ユーザーが入力したデータを検証せずに SQL コマンドを動的に生成する他の攻撃を実行することを指します。これが SQL インジェクション攻撃が成功する主な理由です。
例えば:
クエリ ステートメントが select * from admin where username=''"&user&"''、password=''"&pwd&"''" の場合
したがって、私のユーザー名が 1'' または ''1''=''1 の場合
その場合、クエリ ステートメントは次のようになります。
select * from admin where username=''1 or ''1''=''1'' and passwd=''"&pwd&"''"
このようにして、クエリ ステートメントが通過し、管理インターフェイスに入ることができます。
したがって、予防措置を講じる際には、ユーザー入力をチェックする必要があります。一重引用符、二重引用符、セミコロン、カンマ、コロン、接続番号などの一部の特殊文字を変換またはフィルタリングします。
フィルタリングする必要がある特殊文字と文字列は次のとおりです。
ネットユーザー
xp_cmdshell
/追加
master.dbo.xp_cmdshell を実行する
ネットローカルグループ管理者
選択する
カウント
昇順
文字
半ば
」
:
」
入れる
から削除
ドロップテーブル
アップデート
切り詰める
から
%
以下は、インジェクション攻撃の解決について私が書いた 2 つの防止コードです。参考にしてください。
SQL インジェクション攻撃を防ぐためのコードの js バージョン:
<スクリプト言語="****">
<!--
var url = 場所.検索;
var re=/^?(.*)(select%20|insert%20|delete%20from%20|count(|drop%20table|update%20truncate%20|asc(|mid(|char (|xp_cmdshell|exec%20master|net%20localgroup%20administrators|"|../../image/bbs3000/whatchutalkingabout_smile.gifnet%20user|''|%20or%20)(.*)$/gi;
var e = re.test(url);
if(e) {
alert("アドレスに不正な文字が含まれています~");
location.href="エラー.asp";
}
//-->
<スクリプト>
[コードエンド]
SQL インジェクション攻撃を防ぐためのコードの ASP バージョン~:
[コードスタート]
<%
エラー時は次へ再開
Dim strTemp
If LCase(Request.ServerVariables("HTTPS")) = "off" then
strTemp = "http://"
それ以外
strTemp = "https://"
End If
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" then strTemp = strTemp & "?" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
Instr(strTemp,"select%20") または Instr(strTemp,"insert%20") または Instr(strTemp, "delete%20from") または Instr(strTemp,"count(") または Instr(strTemp,"drop%20table") または Instr(strTemp,"update%20") または Instr(strTemp,"truncate%20") またはInstr(strTemp,"asc(") または Instr(strTemp,"mid(") または Instr(strTemp,"char(") または Instr(strTemp,"xp_cmdshell") または Instr(strTemp,"exec%20master") またはInstr(strTemp,"net%20localgroup%20administrators") または Instr(strTemp,":") または Instr(strTemp,"net%20user") または Instr(strTemp,"''") または Instr(strTemp,"%20or %20")その後
応答。「<script language=''****''>」と書き込みます。
Response.Write "alert(''不正なアドレス!!'');"
Response.Write "location.href=''error.asp'';"
応答。「<スクリプト>」を書き込みます
終了の場合
%>
以下は、誰もがよく知っている比較的簡単な予防方法です。少しでもお役に立てれば幸いです~
主に数値変数の転送用:
id = Request.QueryString("id")
If Not(isNumeric(id))
応答.「不正なアドレス〜」と書き込みます
応答.終了
終了の場合