2

Classic ASP テクノロジーを使用した保守用の Web サイトを入手しました。現在、私のクライアントは、この Web サイトが SQL インジェクションから保護されているかどうかを尋ねています。

Microsoft Source Code Analyzer for SQL Injection を試しましたが、テスト後に警告が表示されませんでした。

これらの従来の ASP ソース コードが SQL インジェクション攻撃から保護されていることをチェック/検証する他の方法はありますか?

お知らせ下さい!ありがとう

4

2 に答える 2

5

知る方法は一つではありません。いくつかのコードを投稿して、それがどのように見えるかを確認できます。

重要なのは、外部からの汚染されたデータを使用して SQL ステートメントを作成しないことです。

このようなステートメントを作成する場合

sql = "select * from whatever where id = " + id_parameter

次に、外界からのデータを使用して SQL ステートメントを作成しますが、これは危険です。

次のように、パラメータ化されたクエリを使用する必要があります。

objCmd.CommandType = adCmdText;
objCmd.CommandText = "UPDATE members SET photo = ? WHERE memberID = ?";
objCmd.Parameters.Append(
    objCmd.CreateParameter("filename", adVarChar, adParamInput, 510, fileName));
objCmd.Parameters.Append(
    objCmd.CreateParameter("memberID", adInteger, adParamInput, 4, memberid ));
objCmd.Execute(adExecuteNoRecords);

objCmd.CommandTextは外部からのデータを一切使用しないことに注意してください。外部データは、CreateParameter 呼び出しを通じて収集されます。

于 2012-12-13T04:07:33.993 に答える
0

コードにパッチを適用して SQL インジェクションが発生しないようにする簡単な方法は、number に対して関数 Cint() を使用することです。

if (request("id")<>"") then id=Cint(id)

または文字列の場合:

if (request("str")<>"") then
 str=Replace(request("str"),"'","''")
 str=Replace(request("str"),"%","")
end if

お役に立てれば

于 2012-12-13T19:40:54.380 に答える