4

私はこれについてかなりの調査を行いましたが、まだ理解に問題があります。ただし、適切に保護されていることを確認したい。SQL インジェクションや DB へのブルート フォースの可能性を防ぐために、Classic ASP で関数を作成しました。より安全にするために、何かを追加したり、削除したり、問題を修正したりする必要がある場合は、ご意見やご提案をいただけますか? 事前にどうもありがとうございました!!

以下は、MySQL データベースに挿入する直前に使用します。

挿入例:

conn.execute("INSERT INTO " & employees & "(eid, first_name, last_name) VALUES('" & Clng(strEID) & "','" & SQLClean(strfirstname) & "','" & SQLClean(strlastname) & "');")

関数:

Private Function SQLClean(ByVal strString)
    If strString <> "" Then
        strString = Trim(strString)

        'Remove malisous charcters from sql\
        strString = replace(strString,"-shutdown","", 1, -1, 1)
        strString = replace(strString,"\","\\", 1, -1, 1)
        strString = replace(strString,"=","\=", 1, -1, 1)
        strString = replace(strString,",","\,", 1, -1, 1)
        strString = replace(strString,"`","\`", 1, -1, 1)
        strString = replace(strString,"&","\&", 1, -1, 1)
        strString = replace(strString,"/","\/", 1, -1, 1)      
        strString = replace(strString,"[","\[", 1, -1, 1)
        strString = replace(strString,"]","\]", 1, -1, 1)
        strString = replace(strString,"{","\{", 1, -1, 1)
        strString = replace(strString,"}","\}", 1, -1, 1)
        strString = replace(strString,"(","\(", 1, -1, 1)
        strString = replace(strString,")","\)", 1, -1, 1)
        strString = replace(strString,";","\;", 1, -1, 1)
        strString = replace(strString,"+","\+", 1, -1, 1)
        strString = replace(strString,"<","\<", 1, -1, 1)
        strString = replace(strString,">","\>", 1, -1, 1)
        strString = replace(strString,"^","\^", 1, -1, 1)
        strString = replace(strString,"@","\@", 1, -1, 1)
        strString = replace(strString,"$","\$", 1, -1, 1)
        strString = replace(strString,"%","\%", 1, -1, 1)
        strString = replace(strString,"!","\!", 1, -1, 1)
        strString = replace(strString,"*","\*", 1, -1, 1)
        strString = replace(strString,"~","\~", 1, -1, 1)
        strString = replace(strString,"#","\#", 1, -1, 1)
        strString = replace(strString,"?","\?", 1, -1, 1)
        strString = replace(strString,"'","\'", 1, -1, 1)
        strString = replace(strString,"""","\""", 1, -1, 1)
        strString = replace(strString,"select","\select", 1, -1, 1)
        strString = replace(strString,"insert","\insert", 1, -1, 1)
        strString = replace(strString,"update","\update", 1, -1, 1)
        strString = replace(strString,"delete","\delete", 1, -1, 1)
        strString = replace(strString," or "," \or ", 1, -1, 1)
        strString = replace(strString," and "," \and ", 1, -1, 1)
        strString = replace(strString,"drop","\drop", 1, -1, 1)
        strString = replace(strString,"union","\union", 1, -1, 1)
        strString = replace(strString,"into","\into", 1, -1, 1)

        'Return cleaned value.
        SQLClean = Trim(strString)

    End If
End Function
4

2 に答える 2

15

純粋に学術的な演習でない限り、いかなる状況でも独自の SQL エスケープ コードを記述しようとしないでください。あなたはそれを間違えます。誰かがあなたのサイトでSQL インジェクション攻撃ツールを使用すると、深刻な結果を招くことになります。ビジネスとキャリアは、これに無頓着なアプローチをとる人々によって破壊されてきました。

パラメーターを使用した Classic ASP および MySQL クエリについて説明している StackOverflow の例を見つけるのに 3 分もかかりませんでした。

どうぞ、どうぞ、公式の施設を利用ください。自分で巻かないでください。

于 2012-09-05T06:59:44.440 に答える
-1

これは、ASP Classic スクリプトでの SQL インジェクション攻撃の防止について読むための良いリンクです。

また、SQL クエリで変数をダンプする前に、変数を常に検証し、適切な値をチェックする必要があることにも注意してください。通常、有効な値をチェックすることは、人々が変数に詰め込む可能性のあるすべての悪いことをチェックするよりも簡単です。

于 2012-09-05T05:34:57.410 に答える