Web 上のフォームから入力を受け取りデータベースに格納したいのですが

SQL インジェクションとかいって SQL 文で特別な意味を持つ文字を入力されると
こちらの意図しない処理を強制的に実行できるそうです。

そこで、フォームからの入力を SQL で特別な意味を持たない文字のみ
に限定したいのですが、どの文字が SQL 文で特殊な意味を持つのかわかりません。

SQL 文で特別な意味を持つ文字/持たない文字をすべて教えてください。

また、こういう場合は特別な意味を持つけど普通は気にしなくていいよなどの
アドバイスもしてくださると助かります。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/08/18 18:43:47
  • 終了:2007/08/18 19:56:59

回答(3件)

id:ManalTencho No.1

ManalTencho回答回数129ベストアンサー獲得回数92007/08/18 18:53:33

SQL で使用される文字についてはこちらをどうぞ。

http://www.faqs.org/docs/ppbook/x1428.htm

あと、

> こういう場合は特別な意味を持つけど普通は気にしなくていいよ

という判断基準はいかにもあいまいなので、考え得る対策は全て施しておくのが無難だと思います。

id:akagi_paon

えっと、SQLインジェクションされる可能性のある文字を聞いてるんですけど・・・

2007/08/18 19:21:25
id:xxxatsxxx No.2

xxxatsxxx回答回数45ベストアンサー獲得回数22007/08/18 19:08:45

ポイント40pt

DBの種類により異なるので明示した方がいいでしょう。

それと、あまり知識がないのであれば、生兵法は危険ですので、プリペアードステートメントが使える外部ライブラリを利用した方がいいです。

言語が分かりませんので、PHPとJavaの例があるとこを載せておきます。

http://php.atseason.com/?eid=507753

http://www.thinkit.co.jp/cert/tech/7/5/3.htm

id:akagi_paon

データベースは MySQL を使う予定です。言語は Perl かな?

プリペアードステートメントについて調べてみましたが、構文をあらかじめ確定しておく方法で、SQLインジェクション対策には非常に有効そうですね。

ありがとうございました。

2007/08/18 19:48:48
id:tomo_k No.3

tomo_k回答回数426ベストアンサー獲得回数262007/08/18 19:10:02

ポイント40pt

データベース製品によって特別な意味を持ついわゆる予約後は変わってきます。

だが、より安全な方法としてはバインドメカニズムを持つ方法を使うべきです。

JavaだとPreparedStatementがそれに相当します。他の言語でもたいてい用意されているのでそれを使うことでSQLインジェクションは回避できます。

http://www.ipa.go.jp/security/awareness/vendor/programming/a02_0...

id:akagi_paon

データベースは MySQL を使う予定です。

あと、聞きたいのはSQLインジェクションを回避する方法ではありません。

エスケープ処理とかを考えるのが面倒だからシングルクォートとかSQLインジェクションの危険性のある文字を最初から入力ではじくようにしたいんです。

----

どうやら質問文が悪かったみたいですね。

質問しなおしましょう。

2007/08/18 19:54:09
  • id:ManalTencho
    ManalTencho 2007/08/18 19:28:46
    上での返答の返事です。
    SQL インジェクションに使用される可能性のある文字は、SQL ステートメント(式)で使用される記号や語句(SELECT、UPDATE、ほか)すべてという理解をされるとよろしいかと思います。
    ということで、提示した URL は、おおむねそれが網羅されているという認識です。

    他の方も言っておられるように、「SQL インジェクション」という字面に踊らされるのではなくそれの意味をしっかりと捉えるならば、おのずからどういう対策方法を取るべきかが見えてくるはずです。
    まずは、SQL インジェクションの意味をしっかりと理解してください。それをもし知りたいのであれば、質問を別途起こしてください。

    よろしく。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません