アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめて質問させていただきます。
よろしくお願いします。

現在、私は大学の研究テーマでデータベース(MySQL、PostgreSQL)を使っているCGIを自作し、それぞれのデータベースについてSQLインジェクションの脆弱性について調べる、という研究を行っています。

ブラインドSQLインジェクションについて調べているのですが、
PostgreSQLの場合、pg_tablesというテーブルにデータベースのテーブル一覧表がのっていて、それを参照することでテーブル名が取得でき、いろいろ悪いことができてしまいますが、MySQLの場合、ブラインドSQLインジェクションを起こそうと思った場合どのようなコマンドを使えばよいのでしょうか?
SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・?


また、全く関係ない質問なのですが、このCGIはRubyで記述して作りました。Rubyにはプリペアドステートメントという機能があるのですが、これをデータベースにアクセスするすべての箇所で用いればSQLインジェクションは100%起きないといえるのでしょうか?(現在考え得る範囲でよいのでお願いします)


卒論で困っているので知っている方がおられましたらどうかよろしくお願いいたします。

A 回答 (2件)

主要なRDBMSでは、表や列の定義情報を表形式で管理し、SQLで検索可能にしています。


MySQLのように、SHOWコマンドといった特別なコマンドで操作させるのは、特殊な例です。
MySQLもバージョン5.0から、情報スキーマを公開しており、SQLでの操作を可能にしています。

>SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・?

「できるのか?」との質問に関しては、工夫次第でできます。
例えばMySQLでは操作内容をログとして残す機能があるので、その結果を拾うツールを作るのは、プログラミング経験のある人にとっては、容易です。

参考URL:http://dev.mysql.com/doc/refman/5.0/en/informati …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

実際に確認して見たらinformation_schemaやmysqlというデータベースにシステム情報が入っていました!
私の知識不足でした。。。

あと、どなたかプリペアドステートメントについて詳しい方がいれば教えていただけないでしょうか・・・・・・・?

お礼日時:2007/02/04 22:09

すべての箇所で prepared statement を使えば(そして実装にバグが無ければ)、文字列を不正に終端させることは出来ません。


そのため文字列の不正な終端によるSQLインジェクションは100%起こりません。
その他の原因(私は知りませんが)による SQLインジェクションが防止できるかどうかは、私にはわかりません。
    • good
    • 0
この回答へのお礼

回答していただいてどうもありがとうございます。
やはりデータベースにアクセスするメソッドをひとまとめにして管理し、すべての箇所でプリペアドステートメントを使えば、現状ではかなり安全だといえるのですね。

MySQLのことでわからないことがあって、もうひとつ質問を投稿させていただいたので、そちらもご存知でしたら答えていただけないでしょうか・・・・・・・

お礼日時:2007/02/06 02:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!