2017-07-12 18 views
0

私はcreatedroptruncatedeleteコマンド正しいの注射を防ぐことができるはずすなわちSQLインジェクションの防止方法

explain ([arbitrary sql string])

のSQL文を中心に説明包まれた場合は?

私はこれを試してみましたが、それはうまくいくようですが、忘れてしまったコーナーケースがあるかどうかはわかりません。

+0

は、このテキストを試してみてください、動的クエリを使用しないでください - http://blog.endpoint.com/2012/06/ detection-postgres-sql-injection.html - 基本的に最も安全な方法は、入力コントロールの値をプロプリペアドステートメントの値としてのみ使用することです。あるいは、 'quote_literal'や' quote_nullable'を使ってステートメントをラップすることもできます。 – JosMac

答えて

6

いいえ。それは動作しません。あなたがやったすべては、攻撃者は、彼らはまた、通常のシングルに加えて)文字を必要と把握するために余計な作業のちょうど非常に少し間に合わある

Explain(select columns from table where value = '');injected sql here --) 

:あなたはまだこのようなもので終わる可能性見積もり。

SQLインジェクションを防止したい場合は、常ににパラメータ化クエリを使用してください。

+0

質問の文脈を伝える。 –

+0

@ EricYang、信頼できないソースから任意のSQLを決して実行しないでください。 –

3

あなたは、一般的に必要とする:

1 /あなたはホワイトリストのアプローチに必要なデータを検証します。文字や他のもの

をブラックリストしないでください

2 /パラメータ化クエリを使用

3 /いつでも

関連する問題