MYSQLとPHPの掲示板があったのでどちらで質問させて頂こうか悩んだのですが、こちらの方に書き込みさせて頂きます。
現在、PHPとMYSQLを用いたプログラミングの勉強をしています。
そこで一つ疑問に感じた事がありましたので、お尋ねしたく投稿させて頂きます。
PEARなどを使わずに、平でSQL文を発行して表示しているのですが…
SQLインジェクション対策・クロスサイトスクリプティング対策として以下の4つに気を付けています。
1. 文字コードはUTF8を使用
2. マジッククォートは基本的にオフ。オンの場合はスクリプト中でstripslashesを実行
3. 2のマジッククォート対策のあとにデータのインサート時に全ての挿入文字列にmysql_real_escape_stringを実行
4. データの出力時にhtmlspecialcharsを実行
以上の対策でSQLインジェクション対策及びクロスサイトスクリプティングについては十分でしょうか?
コードも出さずに漠然とした質問なので返答しづらいかもしれませんが、幅広くご意見を頂けましたら助かります。
よろしくお願いします。
※幅広くご意見頂きたいと思っておりますので記事の終了やお礼が遅くなってしまったらすみませんm(_ _)m
No.1ベストアンサー
- 回答日時:
>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/
お返事ありがとうございます。
>MySQL側にも適切にUTF8を設定すると言うことですよね。
自信が無いのでレス後、文字コードについて調べてみます。
>オンにする必要があるのでしょうか?
勉強中のため、オン状態でどのような処理をすべきか試す時にオンにしたのですが、現在はオフにしています。マニュアルを見るとPHP6ではこの機能無くなってしまうようですね。
>PlaceHolderは使わないという前提でしょうか。
はい、プレースホルダやPEARなど様々なサイトで見かけ便利そうだとは思っているのですが、今は使わずに現在勉強中のSQLをそのまま書く形での方法を試しております。
>インサートというのが、SQLに埋め込むという意味なら、それでよいと思います。
仰る通り、SQL文に組み込む変数や文字列に対してです。
>ENT_QUOTESを必要な部分で使うというのも。
気をつけます。
知識ほぼ0の段階からのスタートで、まだプログラミングと言うものに対して理解が浅く、正直な所を申しますと自分自身「何がわからないのかがわからない」という段階です。
上述した文字コードについても何故UTF8が良いのか、それも分からない状態なので、単純にソースコードをUTF8で書いていれば良いのだと思っていました。
丁寧なお返事とツッコミを頂いた事で
・「何故UTF8が良いのか」を理解出来ていないので、文字コードについての理解を深める必要がある
・MYSQL側の文字コードについて調べる
・クロスサイトスクリプティングがどのようなものかを理解し、自分自身で再現出来るようにする
という課題ができ、「何を知る必要があるのか」がわかりました。
ありがとうございますm(_ _)m
No.3
- 回答日時:
#1です。
回答ボタンを押した後で、UTF8の冗長なコードの話を思い出しました。下記などを参考にしてください。
http://gihyo.jp/admin/serial/01/charcode/0004
「本当は怖い文字コードの話」第1回~第10回まで全て目を通してみました。
Windows上で再現可能な現象なども紹介されていたので、文字コードがどのようなものか良く理解出来ていない私でも文字コードが及ぼす影響について知る事が出来ました。
重ねてありがとうございますm(_ _)m
No.2
- 回答日時:
#1です。
回答ボタンを押した後で、UTF8の冗長なコードの話を思い出しました。下記などを参考にしてください。
http://gihyo.jp/admin/serial/01/charcode/0004
notnot様ありがとうございます。
#1のお礼を投稿後にこちらの記事に気づきました。
「本当は怖い文字コードの話」参考にさせて頂きますm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PHP ここで言うトークンの意味を教えてください。 3 2022/08/24 03:03
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP 掲示板のセキュリティについてアドバイスお願い致します 1 2023/08/11 20:44
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『μg』の読み方と意味。
-
名古屋の栄と錦は治安悪い?
-
テキストボックスからフォーカ...
-
vba メモリーリーク
-
シリアルフラッシュメモリをな...
-
VB.NET でのLaod/unLoad につ...
-
NumericUpDownの数値を選択済み...
-
フォームを開く時のイベント処理
-
hDC=::GetDC(m_hWnd)とhDC=GetD...
-
テキストエディターの文字化け
-
エアー漏れの流量の計算式を教...
-
CPUを2個搭載できるマザーボー...
-
C++の例外処理
-
Flashファイルの幅と高さを調べ...
-
通話中の相手からのキャッチ
-
ヒント表示について
-
SQLインジェクション及びクロス...
-
CD-RWメディアにマジックで書い...
-
word
-
数式中の文字をCambria Math以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
NumericUpDownの数値を選択済み...
-
VB.NET でのLaod/unLoad につ...
-
フォームを開く時のイベント処理
-
VB.NETのテキストボック...
-
テキストボックスからフォーカ...
-
一部の文字のみ文字化けします
-
項目数は英語で
-
エアー漏れの流量の計算式を教...
-
コンピュータ言語paythonのエデ...
-
vba メモリーリーク
-
ヒント表示について
-
C#での変数スコープ?
-
C++の例外処理
-
受け取った値が"undefined"と表...
-
シリアルフラッシュメモリをな...
-
globalと$GLOBALSの違いは?
-
ブック開いたときのフォーカス指定
-
宮迫のフライデー、誰がリーク...
おすすめ情報