Webサイトに複数のWebアプリがある場合、それぞれがデータベースの異なるテーブルに接続され、1つを除いてすべてのアプリがSQLインジェクションから保護されます。 1つのWebアプリを使用して、SQLインジェクションを通じてデータベース内の他のテーブルを読み取り、変更、攻撃できますか?
はい。基盤となるデータベースセキュリティによっては、1回のSQLインジェクション攻撃が同じデータベース内の他のテーブルや、異なるデータベース内のテーブル、または非常に特殊なケースで異なるデータベースインスタンスで実行されているテーブルに影響を与える可能性があります。
単一のデータベースクエリを使用して、一度に複数のテーブルを更新/読み取ることもできます。あなたの質問にmysqlのタグを付けたので、ここに複数のテーブルを更新するためのMySQLクエリがあります。
UPDATE Books, Orders
SET Orders.Quantity=Orders.Quantity+2,
Books.InStock=Books.InStock-2
WHERE Books.BookID=Orders.BookID
AND Orders.OrderID = 1002;
読み取りは、JOINを使用するのと同じくらい簡単です。
SELECT t1.name, t2.otherColumn
FROM Table1 as t1
LEFT JOIN Table2 as t2
ON t1.id = t2.id
明らかに、これらのクエリの有効性は、基になるテーブル構造に依存しますが、SQLインジェクションを使用して、意図しない/複数のテーブルから完全に読み取ることができます。
これが不可能な場合の例は、問題のテーブルがすべて異なるスキーマに属し、それぞれがアクセスできる特定のアカウントを持つ場合です。例:
app1.ImportantTable
app2.OtherTable
app3.BigTable
これらの各スキーマが異なるユーザーアクセスのみを許可するように構成されている場合は、意図しないアクセスが発生することはありません。したがって、App1User
スキーマの読み取り/変更のみが可能なデータベースにapp1
設定がある場合、app2
スキーマのテーブルからデータを選択することはできません。
これは、アプリケーションがデータベースへのアクセスに使用しているデータベースユーザーに付与されている権限に完全に依存します。
最良の場合、いいえ。ユーザーは、アプリケーションが実行するために必要なアクションを実行する必要がないデータやテーブルにアクセスできません。 (最良のケースでは、テーブルに直接アクセスすることはできませんが、特定の制限されたデータを返す定義済みのプロシージャを実行する権限のみが与えられます。)
最悪の場合、他のアプリケーションに属するデータベース内の他のテーブルだけでなく、他のデータベース、データベースエンジンが実行されているサーバー、およびデータベースエンジンを実行しているサーバーが接続されているネットワークにもアクセスできます。 。
アプリケーションがデータベースにアクセスするために使用するユーザーに許可が過度に付与されると、非常に危険な場合があります。データベースユーザーが、アプリケーションが必要とする機能を実行するために実際にアクセスする必要があるオブジェクトとデータのみに適切に制限されていることを確認することが最も重要です。