2012-01-06 2 views
1

データベースにSELECTクエリを許可したいが、更新(または削除)を許可したくない。これは、ユーザー指定のSQLクエリをサニタイズするのに十分ですか?

クエリがSELECTで始まり、セミコロンが含まれていないことを確認するだけで十分ですか?

私は現在、MySQLに対してクエリを実行するためにjdbcを使用していますが、これに制限することはできません。

編集: 更新できないユーザーを使用することには感謝していますが、必要があるかどうかを知りたいのは、迷信だけではなく、知りたいことです。

+2

おそらくありません。あなたは 'SELECT'パーミッションを与えるだけでこれを管理する必要があります。しかし、RDBMSを記述してください。 –

+2

それは起こるのを待っているセキュリティデスタです - 本当にSQLクエリを許可しなければならない場合、可能な限り必要最小限の特権を持つ特別なユーザーを介してそれらを実行する必要があります! – Yahia

答えて

3

このより良い方法は、新しいアカウントを作成してアカウントに特定のコマンドを許可することです。

+0

それは役に立たないでしょう。あなたが私の選択したSELECTクエリを実行させるならば、私は 'USAGE'特権を持つサーバをクラッシュさせることができます。 –

1

ユーザーが送信したコードは実行しないでください。ユーザーがコードを送信できるようにすることは、少なくともサービス拒否攻撃まで自分自身を開くための素晴らしい方法です。たとえば、攻撃者は、サーバーを停止させることが保証された巨大なデカルト製品を使用して簡単にクエリを送信できます。

をユーザーが安全に指定できますが、コードは指定できません。その後、パラメータを持つプリペアドステートメントを使用して、入力した値をSQLクエリに結合します。

ユーザーにSQLクエリを送信することは、非常に危険です。shellexec($_GET["cmd"]);

+0

Billに感謝します。しかし、質問は正確にどのように危険なのかを知ろうとしています。 DOSは私が暮らすことができるものです。私はデータの削除や妥協を恐れています。 – TimP

関連する問題