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

HPのSQLインジェクション対策について。
プレースホルダを使わないで対策を行いたいのですが、

1.リテラル内のシングルクォートをエスケープする。
2.その際、addslashesを使わないでpg_escape_stringやmysql_real_escape_stringを使う
3.SJISをリテラルに含めない
4.リテラルはシングルクォートで囲む
5.DBの文字コードとプログラムの内部文字コードを合わせる

上記以外に注意することはありますか?

●質問者: dedara
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB Hp SJIS SQLインジェクション エスケープ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tama213
●25ポイント

http://www.tokumaru.org/d/20080601.html

数値リテラルのチェックもしたほうがよいです。

数値リテラルが数値であるかどうかのチェックです。

◎質問者からの返答

チェックしたいと思います。


2 ● あすか
●25ポイント

PHP+MySQLという前提条件でしょうか?

各々のバージョンの指定はありませんか?


一般論としては、次のような注意点が挙げられます。

  1. 入力値をSQLに渡さない(例:入力値のバリデーションチェックを行う,O/Rマッピングを行う)
  2. エラー出力を抑制する(例:set_error_handler関数でエラー処理をトラッピングする)
  3. PHPのmysql固有関数を使わない→dbx関数を使うのが好ましい
  4. adminアカウントでDBにログインしない

参考「セキュア・プログラミング講座 Webアプリケーション編」(IPA)

◎質問者からの返答

dbx関数推奨というのは初耳です。何故でしょうか。

詳しくお聞きしたいです。

詳しく解説のあるサイトの紹介でもかまいません。


3 ● b-wind
●50ポイント ベストアンサー

1.リテラル内のシングルクォートをエスケープする。

2.その際、addslashesを使わないでpg_escape_stringやmysql_real_escape_stringを使う

気をつけなければいけない文字はシングルクオートだけではない。

mysql_real_escape_string などの関数はそのほかの注意すべき文字も含めてトータルで問題ない形に変換するための関数。


基本的にはこれらのエスケープ関数に任せておけば最悪文法エラーになる程度で脆弱性になることは少ないが、

前提条件として、「文字コード設定」がきちんと行われていることが前提になる。

SET NAMESは禁止

MySQL SET NAMES でSQLインジェクションに脆弱 | beginsprite log

上記は MySQL の例だが、単にコンソールから(管理者等が)直接アクセスするには問題ない機能でも

Webアプリケーションでの設定方法としては不適切なことも多い。


このあたりは使用するDBMSによって異なるうえに、間違った情報も多いので特に注意する必要がある。

◎質問者からの返答

ありがとうございます。

set namesが危険というのはどこかで聞いたことがありましたが、よくわかりました。


4 ● あすか
●25ポイント

dbx関数推奨というのは初耳です。何故でしょうか。

PHPとRDBMSへのアクセスモジュールを切り離すのが目的です。

一般論として、PHPのバージョンアップとRDBMSのバージョンアップは足並みが揃っているわけではないので、dbx系関数でワンクッション置くようにします。

◎質問者からの返答

なるほど言われてみれば使ったほうが好ましそうですね。

情報が少ないのでいろいろ調べてみます。

関連質問


●質問をもっと探す●



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