人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Web 上のフォームから入力を受け取りデータベースに格納したいのですが
SQL インジェクションとかいって SQL 文で特別な意味を持つ文字を入力されると
こちらの意図しない処理を強制的に実行できるそうです。

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

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

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

●質問者: akagi_paon
●カテゴリ:インターネット ウェブ制作
✍キーワード:SQL Web アドバイス データベース 入力
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ManalTencho
●0ポイント

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

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

あと、

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

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

◎質問者からの返答

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


2 ● xxxatsxxx
●40ポイント

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

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

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

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

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

◎質問者からの返答

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

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

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


3 ● tomo_k
●40ポイント

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

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

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

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

◎質問者からの返答

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

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

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

----

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

質問しなおしましょう。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ