こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLインジェクション及びクロスサイトスクリプティング対策について

MYSQLとPHPの掲示板があったのでどちらで質問させて頂こうか悩んだのですが、こちらの方に書き込みさせて頂きます。
現在、PHPとMYSQLを用いたプログラミングの勉強をしています。
そこで一つ疑問に感じた事がありましたので、お尋ねしたく投稿させて頂きます。
PEARなどを使わずに、平でSQL文を発行して表示しているのですが…
SQLインジェクション対策・クロスサイトスクリプティング対策として以下の4つに気を付けています。

1. 文字コードはUTF8を使用
2. マジッククォートは基本的にオフ。オンの場合はスクリプト中でstripslashesを実行
3. 2のマジッククォート対策のあとにデータのインサート時に全ての挿入文字列にmysql_real_escape_stringを実行
4. データの出力時にhtmlspecialcharsを実行

以上の対策でSQLインジェクション対策及びクロスサイトスクリプティングについては十分でしょうか?
コードも出さずに漠然とした質問なので返答しづらいかもしれませんが、幅広くご意見を頂けましたら助かります。
よろしくお願いします。

※幅広くご意見頂きたいと思っておりますので記事の終了やお礼が遅くなってしまったらすみませんm(_ _)m

投稿日時 - 2010-01-17 23:14:21

QNo.5601285

困ってます

質問者が選んだベストアンサー

>1. 文字コードはUTF8を使用
これはよいと思います。他の対策が楽。MySQL側にも適切にUTF8を設定すると言うことですよね。
>2. マジッククォートは基本的にオフ。オンの場合はスクリプト中でstripslashesを実行
オンにする必要があるのでしょうか?
>3. 2のマジッククォート対策のあとにデータのインサート時に全ての挿入文字列に
PlaceHolderは使わないという前提でしょうか。インサートというのがSQLのINSERTという意味なら不十分です。SQLに埋め込むすべての変数・式の値に対してすべき。例えば比較対象文字列とか。インサートというのが、SQLに埋め込むという意味なら、それでよいと思います。
>4. データの出力時にhtmlspecialcharsを実行
ENT_QUOTESを必要な部分で使うというのも。

3と4をもれなくやっていれば大丈夫と思いますよ。


わざとXSS脆弱性が作り込んであって、破る練習?のサイトがあります。これをやると守るスキルが上がると思います。私は11まで行きました。2-3くらいまでは楽勝でしょう。
http://xss-quiz.int21h.jp/

投稿日時 - 2010-01-18 03:08:43

お礼

お返事ありがとうございます。
>MySQL側にも適切にUTF8を設定すると言うことですよね。
自信が無いのでレス後、文字コードについて調べてみます。

>オンにする必要があるのでしょうか?
勉強中のため、オン状態でどのような処理をすべきか試す時にオンにしたのですが、現在はオフにしています。マニュアルを見るとPHP6ではこの機能無くなってしまうようですね。

>PlaceHolderは使わないという前提でしょうか。
はい、プレースホルダやPEARなど様々なサイトで見かけ便利そうだとは思っているのですが、今は使わずに現在勉強中のSQLをそのまま書く形での方法を試しております。

>インサートというのが、SQLに埋め込むという意味なら、それでよいと思います。
仰る通り、SQL文に組み込む変数や文字列に対してです。

>ENT_QUOTESを必要な部分で使うというのも。
気をつけます。

知識ほぼ0の段階からのスタートで、まだプログラミングと言うものに対して理解が浅く、正直な所を申しますと自分自身「何がわからないのかがわからない」という段階です。
上述した文字コードについても何故UTF8が良いのか、それも分からない状態なので、単純にソースコードをUTF8で書いていれば良いのだと思っていました。
丁寧なお返事とツッコミを頂いた事で

・「何故UTF8が良いのか」を理解出来ていないので、文字コードについての理解を深める必要がある
・MYSQL側の文字コードについて調べる
・クロスサイトスクリプティングがどのようなものか​を理解し、自分自身で再現出来るようにする

という課題ができ、「何を知る必要があるのか」がわかりました。
ありがとうございますm(_ _)m

投稿日時 - 2010-01-18 04:07:28

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1です。回答ボタンを押した後で、UTF8の冗長なコードの話を思い出しました。
下記などを参考にしてください。

http://gihyo.jp/admin/serial/01/charcode/0004

投稿日時 - 2010-01-18 03:13:38

お礼

「本当は怖い文字コードの話」第1回~第10回まで全て目を通してみました。
Windows上で再現可能な現象なども紹介されていたので、文字コードがどのようなものか良く理解出来ていない私でも文字コードが及ぼす影響について知る事が出来ました。
重ねてありがとうございますm(_ _)m

投稿日時 - 2010-01-18 13:42:00

ANo.2

#1です。回答ボタンを押した後で、UTF8の冗長なコードの話を思い出しました。
下記などを参考にしてください。

http://gihyo.jp/admin/serial/01/charcode/0004

投稿日時 - 2010-01-18 03:12:16

お礼

notnot様ありがとうございます。
#1のお礼を投稿後にこちらの記事に気づきました。
「本当は怖い文字コードの話」参考にさせて頂きますm(_ _)m

投稿日時 - 2010-01-18 04:21:58

あなたにオススメの質問