今日、古いストアドプロシージャを見ていquotename
て、入力パラメーターで使用されていることに気付きました。それが何をしているのかを正確に理解するために少し掘り下げた後、私はこのサイトを見つけました。私はそれが何をするか、そしてそれをどのように使うかを理解しました、しかしサイトはそれがSQLインジェクション攻撃からの緩和として使われると言います。asp.netを使用してデータベースを直接クエリするアプリを開発していたときは、ADO.Netパラメータを使用してユーザー入力をリテラル値として渡し、ストアドプロシージャでそれを保護することについて心配することはありませんでした。
現在、自分が記述していないアプリケーションで使用されるストアドプロシージャを記述しているので、プロシージャレベルでインジェクション攻撃から保護する必要quotename
があります。これは、これを行うための最良の方法であるか、より新しい機能/優れた方法があります。方法?
この思考パターンに私を導いたコード(@parm1
ユーザー入力パラメーターです):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '