web-dev-qa-db-ja.com

SQLインジェクションはログインをバイパスできますが、テーブルをドロップできません

コードに対してSQLインジェクションを実行するためのテスト環境をセットアップし、それを防ぐ方法を学びました。次のパスワードフィールドを使用して、ログインフォームをバイパスできます。

' OR username = 'admin

これは私にクエリを与えます:

SELECT * FROM customer_data WHERE username = '' AND password = '' OR username = 'admin'

これは問題なく動作しますが、テーブルのドロップに問題があります。私はパスワードフィールドに次のようなものを挿入することに沿ってさまざまな試みを試みました:

OR '1' = '1'; DROP TABLE temp; --

Tempと呼ばれるテーブルを作成しました。 PHP MyAdmin(ページが使用しているのと同じ資格情報)にログインした場合、上記で作成したクエリを手動で挿入でき、問題なく動作します。

14
Scott Helme

PHPで使用する関数ではスタッククエリが許可されていないか、クエリを実行するように構成されているユーザーにテーブル削除権限がないためです。すべての出力をログに記録し、アプリケーションによってスローされた例外。問題がどこにあるのか手掛かりを与える可能性があります。

編集1:クエリを実行する代わりに、画面に出力します。

10
Lucas Kauffman

これは、深夜にドキュメントを読んだ後の私の見落としでした!

mysql_query()は、指定されたlink_identifierに関連付けられているサーバー上の現在アクティブなデータベースに一意のクエリ(複数のクエリはサポートされていません)を送信します。

4
Scott Helme