2012-01-23 7 views
0

私はいくつかの同様の質問を見ましたが、mysqlについては何もありません...
SPへのSQLインジェクションを行う方法はありますか? これをSPレベルで保護するにはどうすればよいですか?
言い換えれば、SP内のクエリは、入力パラメータによって何らかの形で変更することができますか?
私は、ストアドプロシージャにパラメータ送信する場合は「1を、ユーザーからのDELETE; - 」 とクエリは次のとおりです。ストアドプロシージャでSQLインジェクションを実行できますか?

select * 
from T 
where = @p 
+0

プログラミングメディアとは何ですか?それが直接起こっていることを心配している場合は、SQLインジェクションから保護することは冗長です。 –

+0

@Brian Graham - 私はPHPを使用しています。あなたはPDOを使ってこれをサニタイズするのが最善の方法でしょうか? –

+0

UIがWebインターフェイスであると仮定すると、入力フィールドでHTMLエンコーディングまたはJavaScriptエンコーディングを行います。デスクトップアプリケーションの場合は、私が想像するような何かをすることができます。ストアドプロシージャ自体からのSQLインジェクションについて心配しているのであれば、それはすべて別の問題です。たぶんいくつかのカスタム正規表現を書いて、それらをSQLコマンドに渡す前に変数を実行してください。 – Brian

答えて

5

SQLインジェクションは、クエリに余分なコードを追加して、基本的に、です。この攻撃自体は、サーバーがSQLコードとして入力データを解析し、それに応じてそれを実行するために発生します。実行がプロシージャに到達すると、攻撃はすでに成功しているため、SPレベルでそのオブジェクトを保護することはできません。

クエリをテキストとして構成している限り、クエリのテキストに関係なくSQLインジェクションが可能です。もしあなたがそうしないと、あるいは適切にあなたの入力を浄化すれば、SQLインジェクションはSELECTであろうとなかろうと問題ではありません。

+0

実際、それはかなり良い答えです。ストアドプロシージャ内でパラメータ(または他の外部ソース)から来る文字列を 'CONCAT()してクエリを作成する場合、このSPはインジェクションに対して脆弱です。それ以外の場合は安全です。 – Mchl

関連する問題