はじめて質問させていただきます。
よろしくお願いします。
現在、私は大学の研究テーマでデータベース(MySQL、PostgreSQL)を使っているCGIを自作し、それぞれのデータベースについてSQLインジェクションの脆弱性について調べる、という研究を行っています。
ブラインドSQLインジェクションについて調べているのですが、
PostgreSQLの場合、pg_tablesというテーブルにデータベースのテーブル一覧表がのっていて、それを参照することでテーブル名が取得でき、いろいろ悪いことができてしまいますが、MySQLの場合、ブラインドSQLインジェクションを起こそうと思った場合どのようなコマンドを使えばよいのでしょうか?
SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・?
また、全く関係ない質問なのですが、このCGIはRubyで記述して作りました。Rubyにはプリペアドステートメントという機能があるのですが、これをデータベースにアクセスするすべての箇所で用いればSQLインジェクションは100%起きないといえるのでしょうか?(現在考え得る範囲でよいのでお願いします)
卒論で困っているので知っている方がおられましたらどうかよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
主要なRDBMSでは、表や列の定義情報を表形式で管理し、SQLで検索可能にしています。
MySQLのように、SHOWコマンドといった特別なコマンドで操作させるのは、特殊な例です。
MySQLもバージョン5.0から、情報スキーマを公開しており、SQLでの操作を可能にしています。
>SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・?
「できるのか?」との質問に関しては、工夫次第でできます。
例えばMySQLでは操作内容をログとして残す機能があるので、その結果を拾うツールを作るのは、プログラミング経験のある人にとっては、容易です。
参考URL:http://dev.mysql.com/doc/refman/5.0/en/informati …
回答ありがとうございます。
実際に確認して見たらinformation_schemaやmysqlというデータベースにシステム情報が入っていました!
私の知識不足でした。。。
あと、どなたかプリペアドステートメントについて詳しい方がいれば教えていただけないでしょうか・・・・・・・?
No.2
- 回答日時:
すべての箇所で prepared statement を使えば(そして実装にバグが無ければ)、文字列を不正に終端させることは出来ません。
そのため文字列の不正な終端によるSQLインジェクションは100%起こりません。
その他の原因(私は知りませんが)による SQLインジェクションが防止できるかどうかは、私にはわかりません。
回答していただいてどうもありがとうございます。
やはりデータベースにアクセスするメソッドをひとまとめにして管理し、すべての箇所でプリペアドステートメントを使えば、現状ではかなり安全だといえるのですね。
MySQLのことでわからないことがあって、もうひとつ質問を投稿させていただいたので、そちらもご存知でしたら答えていただけないでしょうか・・・・・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他のデータベースとのテーブル結合
-
ACCESS アクセスで他のデータ...
-
データベース容量の算出方法に...
-
SQliteの日付検索について
-
テーブル単位のエクスポート、...
-
ODBCの設定について
-
同姓同名検索
-
2台のサーバー間でのテーブル...
-
Visuaal Studio Community 2022...
-
カラムが不定なデータベースの...
-
Microsoft Access:クエリのフ...
-
[1000地域 × 10カテゴリー = 1...
-
QSL でのフォーム画面作成について
-
ACCESS(VBA)について
-
クロステーブルとデータベース...
-
Accessでデータシートに同じデ...
-
一つ前に戻るには…
-
テーブル名をカラムとして取得...
-
SELECT 文の NULL列は?
-
SQLでSUMなどの関数でデータが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他のデータベースとのテーブル結合
-
SQliteの日付検索について
-
Visuaal Studio Community 2022...
-
Notion@リレーション値の取得...
-
2台のサーバー間でのテーブル...
-
QSL でのフォーム画面作成について
-
データベースを複数作ったほう...
-
Microsoft Access:クエリのフ...
-
ACCESS アクセスで他のデータ...
-
テーブル単位のエクスポート、...
-
Oracleのsystem表領域について
-
Accessで2種類のデータベースを...
-
ACCESS(VBA)について
-
バッチファイルを使ったテーブ...
-
コマンドラインオプションにパ...
-
データベースのインポートがで...
-
構造が同じ別テーブルInsert In...
-
データベースのレコード内容が...
-
SQL Server 2000 テーブル未使...
-
一つのMySQLデータベースで、複...
おすすめ情報