ここから本文です

htmlspecialcharsとmysql_real_escape_stringについて質問です!

umi********さん

2011/5/609:53:36

htmlspecialcharsとmysql_real_escape_stringについて質問です!

htmlspecialcharsというのは、フォームから送信された内容をブラウザ上に表示する(printまたはechoを使う)ときに使う関数、
という認識であってますか?

また、mysql_real_escape_stringは、フォームから送信された内容をデータベースに挿入する(INSERTを使う)ときに使う関数、
という認識であってますか?


また、これらは、

①フォームから送信された内容をブラウザに表示するときに、htmlspecialcharsとmysql_real_escape_stringを両方使う
②フォームから送信された内容をデータベースに挿入するときに、htmlspecialcharsとmysql_real_escape_stringを両方使う

ということはあるんでしょうか??

逆に、

③フォームから送信された内容をブラウザに表示するときに、mysql_real_escape_stringを使う
④フォームから送信された内容をデータベースに挿入するときに、htmlspecialcharsを使う

ということもありえるのでしょうか?


セキュリティにかかわる大事な部分だと思うので、きちんと理解したいです(>_<)

実務でPHPやMySQLをご利用されている方にご教授頂けると幸いですm(_ _)m

閲覧数:
3,679
回答数:
2

違反報告

ベストアンサーに選ばれた回答

whi********さん

編集あり2011/5/614:03:03

> htmlspecialcharsというのは、フォームから送信された内容をブラウザ上に表示する(printまたはechoを使う)ときに使う関数、という認識であってますか?

間違ってはいませんが、十分ではありません。
htmlspecialchars は、「変数の値をブラウザに出力するとき」に使います。
変数の値はフォームから送信された内容に限らず、DBから読み込んだ値やCSVファイルから読み込んだ値なども含みます。
変数の値をブラウザに出力する場合には、これらの値も適切にエスケープする必要があります。


> また、mysql_real_escape_stringは、フォームから送信された内容をデータベースに挿入する(INSERTを使う)ときに使う関数、という認識であってますか?

これも同様に、間違ってはいませんが十分ではありません。
mysql_real_escape_string は、「変数の値をSQL文にセットするとき」に使います。
変数の値はフォームから送信された内容に限らず、DBから読み込んだ値やCSVファイルから読み込んだ値なども含みます。
変数の値をSQL文にセットする場合には、これらの値も適切にエスケープする必要があります。

※なお、SQLインジェクションを避けるという観点からは、プリペアードステートメントの使用が推奨されます。
http://php.net/manual/ja/pdo.prepared-statements.php


「フォームから送信された内容を~」と覚えるのは間違いです。
フォームの値に限らず、「変数の値は全て、出力する直前に適切にエスケープしなければならない」と覚えて下さい。

質問した人からのコメント

2011/5/13 10:34:24

tezcello様、whitewind_zero様
とても親切丁寧にお答えくださり、誠にありがとうございます!!(>_<)
わたしの中ではお二人ともベストアンサーです!!
本当にありがとうございました!o(^o^)o

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

tez********さん

2011/5/610:24:25

> htmlspecialcharsというのは、フォームから送信された内容をブラウザ上に表示する(printまたはechoを使う)ときに使う関数、
という認識であってますか?

合っていると思います。


> また、mysql_real_escape_stringは、フォームから送信された内容をデータベースに挿入する(INSERTを使う)ときに使う関数、
という認識であってますか?

INSERT に限らないと思いますが、合っていると思います。


> htmlspecialcharsとmysql_real_escape_stringを両方使う
無いと思います。
使途に合致したものを使うべきでしょう。

> ブラウザに表示するときに、mysql_real_escape_stringを使う
> データベースに挿入するときに、htmlspecialcharsを使う
同じ理由で無いと思います。


参考になるかと思います。
http://takagi-hiromitsu.jp/diary/
あちらこちらにあるので、見つけ難いですが、例えばこんなの
http://takagi-hiromitsu.jp/diary/20051227.html
http://takagi-hiromitsu.jp/diary/20060115.html

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる