0

そこで、ユーザーが独自の SQL クエリを入力できる単純なサイトを作成しようとしています。これをサーバー側で実行します。

私は SQL インジェクション攻撃を認識しており、これはかなり危険なことだと思います。

しかし、(もしあれば) この機能を許可する安全な方法は何でしょうか?

たとえば、強制できる次のルールを考えることができます。

  • ユーザーに「SELECT」のみを許可し、UPDATE、DELETE (またはその他のもの) を許可しないでください。
  • ユーザーが特定のテーブルにのみアクセスできるようにします (知っている場合)。

他に取るべきセキュリティ対策はありますか?

4

2 に答える 2

0

セキュリティの問題だけでなく、ElectricLlama によって指摘されているように、パフォーマンスも問題になる可能性があります。事前にクエリの実行計画を取得し、クエリのコストが高すぎると思われる場合は実行を拒否することを検討することをお勧めします: クエリ実行計画を取得するにはどうすればよいですか?

于 2013-04-12T07:28:49.217 に答える
-1

上記に加えて、ユーザーがdb_datareaderグループに追加されていることを確認してください。これにより、グループが読み取り専用になります。単一のユーザーを使用してそのデータベース アクションを実行すると思います。

ユーザーが誤っていくつかのクロス結合を行った場合でも、データベース エラーが発生します。

SELECT *
FROM Table1,Table2,Table3
WHERE Table1.Field1=Table2.Field2
-- Oops I forgot to enter the Table3 Join condition 
-- so now I get a cross join which will cause havoc
-- If the table is of appreciative size

でもとにかく危険!誰かがセキュリティホールを見つけるでしょう!

于 2013-04-12T05:56:29.770 に答える