誰かが内部テストのためにSQLサーバーに任意のSQLステートメントを入力できるオープンフォームがあり、実行する前にステートメントから次のキーワードを削除した場合でも、誰かがミューテーションを実行することは危険ですか?
INSERT, DELETE, DROP, UPDATE, CREATE, ALTER, TRUNCATE, EXEC
これらの操作を実行するSQLアカウントには、読み取り/書き込み権限があります。
誰かが内部テストのためにSQLサーバーに任意のSQLステートメントを入力できるオープンフォームがあり、実行する前にステートメントから次のキーワードを削除した場合でも、誰かがミューテーションを実行することは危険ですか?
INSERT, DELETE, DROP, UPDATE, CREATE, ALTER, TRUNCATE, EXEC
これらの操作を実行するSQLアカウントには、読み取り/書き込み権限があります。
権限を変更できない場合は、selectステートメントをにラップしてCREATE VIEW AS
からビューを実行できますか?select以外のものが実行された場合、これは(環境に応じて)エラーになるはずです。
攻撃者が 1 つのテーブルに対して読み取り専用権限しか持っておらず、アプリをだまして任意の SQL を実行させることができる場合、デカルト積を実行することで、少なくともサービス拒否攻撃を行うことができます。
SELECT *
FROM table, table, table, table, table, table, table, table, table, table
ORDER BY RAND();
テーブルに 100 行ある場合、SQL サーバーはクラッシュすることなく100 10行の並べ替えを処理できますか? :-)
結論として、SQL 特権を制限することは解決策の 1 つになる可能性がありますが、攻撃者から身を守るための完全な解決策ではありません。複数の手法を使用する方法と、防御的にコーディングする方法を知る必要があります。
プレゼンテーションでは、さまざまな防御手法と、さまざまな状況で役立つ手法について説明します: SQL インジェクションの神話と誤謬
はい - SELECT INTO を使用できます。
http://www.w3schools.com/sql/sql_select_into.asp
ユーザー アカウントで使用できる権限を適切に使用することをお勧めします。読み取り専用権限を持つアカウントを作成します。すべてのメインストリーム サーバーでこれを行うことができます。