SQL インジェクションに対する従来の ASP 保護から SQL インジェクションに対する保護に大きな助けを得た後、パラメーター化されたクエリを使用しても解決できない大きな問題に遭遇しました。
name = Trim(Request.QueryString("name"))
flds = Trim(Request.QueryString("flds"))
sql = "set rowcount 0 select " & flds & " from [TABLE] where Name = '" & name & "'"
私が理解していることから、パラメーター化されたクエリは、WHERE 句 (この場合はname
フィールド.
flds
ユーザーが返したいパラメーターのコンマ区切りリストです。明らかなように、 SQL インジェクションに対して非常に脆弱です。
コードを保護するために必要な 1 つのアイデアは、静的に生成された有効なフィールドの辞書を作成し、flds
文字列を "," で分割し、辞書に対して各値を検証し、すべてのフィールドで構成される SQL クエリを作成することです。辞書に存在します。
この方法はセキュリティのために機能しますが、データベースに変更が加えられるたびに静的リストを変更する必要があるように思えます (ただし、それらはまれです)。
このコードを SQL インジェクション攻撃から保護するためのより良い/適切な方法はありますか?