名前付きパラメータを使用しないすべてのクエリを単に拒否するだけで、SQLインジェクションのすべての脅威を一度にすべて停止することができます。それを行うためにSQL Serverを構成する方法は?または、SQLパーサ全体を記述せずに各クエリを検査することで、アプリケーションレベルでそれを強制する方法はありますか?ありがとう。名前付きパラメータを使用しないSQL Serverのすべてのクエリを無効にしますか?
答えて
これを行うには、いくつかの方法があります。 OMG Poniesには最良の答えがあります。データベースに対して直接SQL文を許可せず、代わりにSQL Serverが提供できるツールとセキュリティを活用してください。
別の方法として、すべてのクエリが通過する必要がある追加の層を追加することができます。要するに、すべてのクエリ(SOAアーキテクチャ)をSQL Serverに渡すためのクエリを評価する新しいアプリケーションに渡します。私は、サイトが持っていたSQLインジェクションの問題に反応して、まさにある企業がこれを行うのを見てきました。
もちろん、SQLインジェクションは潜在的な問題の1つに過ぎないため、これは恐ろしいことです。
SQLインジェクション以外にも、サイト自体にクラックが発生した場合の問題があります。新しいページをWebサーバーに書き込むことができれば、関連するデータベースサーバーに任意のクエリを渡すことは簡単になります。これは、あなたが配置できるコードレベルのものを簡単にバイパスします。攻撃者はselect * from ...
またはtruncate table ...
Heckと書くことができます。内部の人は、サイトの資格情報を使用してSQL Serverに直接接続し、必要なクエリを実行するだけです。
重要なのは、SQL Serverに組み込まれたセキュリティを活用してダイレクト・テーブル・アクセスを防止すると、ストアド・プロシージャを介してサーバーに接続しようとするすべての人が利用できるあらゆるアクションを制御できるということです。
MVCパターンは、基本的には?種別: –
dbアクセス部分だけがファイアウォールの背後に隠れた別個のアプリケーションでなければならず、ホワイトリストのマシン(IISサーバー)によって特定の方法でしかアクセスできません。より簡単に、より良い方法が存在するときには、多大なトラブルが発生します。 – NotMe
- (S)テーブルに対してDELETE// UPDATE/INSERTを選択することができるようにする役割のために許可を削除
- グラントは、ストアドプロシージャ/機能のための役割に/実行など
- アソシエイト関係あなたが保護したいデータベースユーザへのロール
アクセスを許可する権限を持つアカウントは停止しませんが、ロールに関連付けられているユーザは停止します(ユーザーごとに)ストアドプロシージャ/関数/ etcの外でクエリを実行することができなくなります。exi st。
+1000。これは最善の方法です。なぜそれをwikiとしてマークしましたか? – NotMe
しかし、それはストアドプロシージャにすべてのクエリを置くことを余儀なくさせるでしょう。パラメータのないクエリをブロックしているわけではなく、すべてのクエリをブロックしているだけです。 :) – GolezTrol
ストアドプロシージャは、コードの可読性を低下させ、コードプッシュの複雑さなどを導入します。これについては、別のSOの質問があります。 Sqlサーバーが名前付きパラメーターなしでWHERE節を検出し、それらを拒否するのは些細なことです。これを行う方法がないことは奇妙です。 – nganju
どのようにチェックしたいですか?クエリには、クエリに簡単に追加できるような一定の値が含まれることがあります。
SELECT NAME FROM SOMETABLE WHERE ID = :ID AND LANGUAGEID = 1
IDがパラメータであるが、言語IDではありません:たとえば、私はマルチリンガルであることを準備されたデータベースを持って、すべてではないコードがあるので、私のクエリは次のようになります。このクエリはブロックする必要がありますか?
名前付きパラメータを使用しないクエリをブロックするように求められます。それは容易に強制することができます。パラメータを指定しないクエリをブロックするだけです。アプリケーション層でこれを行うことができます。しかし、上記のようなクエリをブロックするのは難しく、一方の値はパラメータであり、もう一方の値はパラメータではありません。あなたはそれを検出するためにそのクエリを解析する必要がありますが、それは難しいでしょう。
SQL Serverには、これを行うための機能が組み込まれていないと思います。
- 1. ExecuteStoreQueryとExecuteStoreCommandでSQL Server名前付きパラメータを使用する
- 2. Django:生のSQLクエリで名前付きパラメータを使用
- 3. SQL Serverテーブルの列に名前を付けるときは、使用しない名前がありますか?
- 4. SQL Server - パラメータ名に無効な文字があります
- 5. SQL Serverの:SQL Serverの データベース:使用して、その名前
- 6. 動的SQLを使用するSQL Serverの列名が無効
- 7. Delphiを使用してSQL Serverストアドプロシージャのパラメータ名を渡す
- 8. OdbcCommandで名前付きパラメータを使用できますか?
- 9. WebMatrix/WebPages/SQLコンパクト - 名前付きSQLパラメータ
- 10. C#:オプションのパラメータと名前付き引数を使用してコンストラクタをオーバーロードしていますか?
- 11. 名前を使用してPerlでpostgresクエリをバインドするパラメータ
- 12. EJBQL名前付きパレメータをクエリで繰り返し使用できますか?
- 13. 名前付きパラメータの主なパフォーマンスの低下とネイティブSQLでのhibernateを使用したSQLインジェクションの防止
- 14. パラメータ付きの名前付きパラメータ
- 15. SQL Server 2008データベースを復元した後に「無効なオブジェクト名」
- 16. このT-SQLクエリ:無効な列名、
- 17. SQL Serverを使用して同じ名前のXMLノードからすべてのデータを取得する
- 18. Azure SQL Serverの名前/名前を変更します。
- 19. SQL Serverエラー無効な列名 'NaN'
- 20. 休止状態:すべての名前付きパラメータが
- 21. JdbcTemplateを春バッチの名前付きパラメータで使用する
- 22. 名前付きパラメータをdefrecordでクローズしますか?
- 23. SQL SERVER ODBCエラー(無効なオブジェクト名)ですが、SQLクエリmydb.dbo.mytableを追加するとすべて正常に動作します
- 24. sp_executesqlを使用しているときに列名が無効
- 25. 名前付きパラメータをLIKE用PDOで使用する
- 26. 無効なパラメータ名
- 27. SQL Server 2005のインデックスに動的な名前を付けますか?
- 28. NHibernateの名前付きクエリでUnmappedクラスを使用する
- 29. Java8の名前付きパラメータ
- 30. Ocamlの名前付きパラメータ
これはどのようにしてすべてのSQLインジェクションを停止しますか? – DaveShaw
明らかです。パラメータにSQLを挿入することはできません。 – GolezTrol