![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Webページのフォームを使い,MySQLデータベースにSQLインジェクションを実行しようとしています.
環境はもちろんローカル環境です.
テーブルはこのようになっています.
mysql> DESC member;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| no | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | | |
+-------+--------------+------+-----+---------+----------------+
JSPページのソースの一部はこのようになっています.
PreparedStatement ps = db.prepareStatement("INSERT INTO member(no, name) VALUES(" + no + ",'" + name + "')");
noに
12
nameに
name'); DELETE FROM member; --
という入力を与えると
INSERT INTO member(no, name) VALUES(12,'name'); DELETE FROM member; --')
となり,テーブルのデータを全て消去できると考えましたが,文法エラーとなるらしく,消去されません.
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; DELETE FROM member; --')' at line 1
この場合,ソース・フォーム入力内容・データベースなどのどの箇所をどのように修正すれば良いでしょうか?
No.1ベストアンサー
- 回答日時:
MySQLは基本的にAPIからの複数のSQL文の同時処理には対応しておりません
ただしバージョン4.1以降は接続時にパラメータを設定することにより可能になるそうです。
詳しくは以下のページを参照して下さい。
11.1.8. C API における複数クエリの実行の取り扱い
http://dev.mysql.com/doc/refman/4.1/ja/c-api-mul …
当然のことながらSQLインジェクション攻撃に対しては
非常に脆弱になるはずですのでご注意下さい。
No.2
- 回答日時:
最低限、DELETE権限をつけなければ消されることはありません。
実行ユーザーの権限については常識的な範囲で制限をつけておいてください
どちらかというとインジェクションの場合、全件表示をされてしまう方が通りやすいですね。
それにしても、ユーザーから送られてきたデータを無条件に信用する
ことはありえませんので、あらじめ使われるべき変数に、サニタイズ
しておけば済むでしょう。
JSPについてはよくわかりませんが、実際のところ今回の処理は
プリペアドステートメントで処理しているのではないのですか?
であればある程度基本的なリスクは回避してくれていると思いますが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LIMIT で条件を満たしているの...
-
LOAD DATA INFILE でエラー起き...
-
接続ができません
-
VBAで変数内に保持された二次配...
-
like句を使って日本語を検索す...
-
phpとmysqlを使っています。
-
SQLのVARCHARとVARCHAR2の違い
-
ヌル値は記憶容量を必要としな...
-
ERROR 1054 (42S22) 原因不明です
-
ERROR 1045 (28000) (using pas...
-
Usage: \\.<filename> | sourc...
-
文字コードMS932(Windows-31J...
-
ODBC接続で全角文字が文字化け
-
MySQLに外部PCから接続できない
-
JDBCドライバについて
-
列数が多いと結果が行単位に改...
-
ADOのバージョンを確認する方法
-
phpからinsertできない
-
副問合せにLIKE文を使う方法は...
-
MYSQLで読替え(SELECT~CASE)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル作成でエラーが出てき...
-
MySQLのテーブル作成でハイフン...
-
MYSQLサービス停止時にWindows...
-
LIMIT で条件を満たしているの...
-
SQLで抽出してCSVで書き出した...
-
MYSQLのログにつきまして
-
mysqlコマンドにてタイムアウト
-
実行時エラー80004005
-
MySQL エラー Duplicate entry...
-
MySQLのCHECK制約がうまくいき...
-
(統計量の)分散を算出したい
-
MySQLの「zaiko」テーブルを作...
-
MYSQLのデータに「;」を入力
-
phpMyAdminについて
-
order byの役割を知りたいです。
-
MySQL3→MySQL5にしたのですが、...
-
データベースについて質問させ...
-
フォームからDBへの接続
-
MySQL+PHPのエラーについて
-
SQLインジェクションの例
おすすめ情報