web-dev-qa-db-ja.com

ストアドプロシージャはPostgreSQLでのSQLインジェクションを防ぎますか?

ストアドプロシージャがデータベースの注入を妨げるのは本当ですか?少し調べたところ、SQL-Server、Oracle、およびMySQLは、ストアドプロシージャのみを使用する場合、SQLインジェクションに対して安全ではないことがわかりました。ただし、この問題はPostgreSQLには存在しません。 PostgreSQLのコアにストアドプロシージャを実装すると、SQLインジェクションができなくなりますか、それとも他の理由/違いがありますか?ストアドプロシージャのみを使用する場合、PostgreSQLでSQLインジェクションを使用できますか?

19
Am1rr3zA

つまり、ストアドプロシージャはSQLインジェクションを妨げません。ストアドプロシージャ内で動的SQLを処理する方法によって異なります。

より完全な回答については、ここに投稿されている内容を確認してください: https://stackoverflow.com/questions/627918/am-i-safe-against-sql-injection

11
anonymous

これらのリンクを確認すると、画像がより鮮明になります。

http://anubhavg.wordpress.com/2008/02/01/are-stored-procedures-safe-against-sql-injection/

http://www.sqlmag.com/article/sql-server/protecting-against-sql-injection.aspx

"... SQLインジェクションを回避するための対策

  1. サーバー上のユーザーからのすべての入力を検証します。
  2. 別の方法が利用できる場合は、動的SQLクエリの使用を避けます。
  3. パラメータが埋め込まれたパラメータ化されたストアドプロシージャを使用します。
  4. JDBCのCallableステートメントやADOのCommandObjectなどの安全なインターフェイスを使用して、ストアドプロシージャを実行します。
  5. 低い特権のアカウントを使用してデータベースを実行します。
  6. アプリケーションで使用されているストアドプロシージャに適切な役割と権限を与えてください。」
6

[〜#〜] if [〜#〜]使用SP正しく、あなたはかなりSQLインジェクションから安全です(もちろん、当然ながら適切な入力検証を行うことが前提です)[〜#〜] if [〜#〜]

ああ、でも、SPを正しく使用するとはどういう意味ですか?

よく見られるSPの最も一般的な誤用の2つであり、それぞれがSQLインジェクションにつながる可能性がありますが、ストアドプロシージャ、は:

  • SP内の動的SQL。
  • 連結文字列を実行するのと同じように、コードからSPを呼び出します。つまり、データベースに送信するだけです "execspname( param1) "、コマンド/パラメーターオブジェクトを使用する代わりに(または言語に応じて、クエリをパラメーター化します。)SQLiは、SP呼び出しに注入できます...
5
AviD

クエリがストアドプロシージャであるかどうかに関係なく、名前付きパラメーターと共に変数バインディングが必要です。また、次のような特定のSQLステートメントについても考慮する必要があります:LIKE

4
atdre