- ベストアンサー
「addslashes」と「htmlspecialchars」について
- 「addslashes」と「htmlspecialchars」について、いくつか分からない点があるので、教えてください。
- 関数化している例が掲載されているのですが、このやり方を真似してもよいものでしょうか?
- 「addslashes」と「htmlspecialchars」を一つの関数にまとめることは、次のどれに当たるでしょうか?・別に問題ない・奨励はしないけど、間違いではない・止めたほうがよい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>> ■質問1. 三択なら「・止めたほうがよい」理由は #1 に書いた。 ちなみに htmlspecialchars の 第三引数 $charset のデフォルトは ISO-8859-1 で固定なため、省略した場合ほとんど使い物にならない。 >> ■質問2. addslashes [ クォートされるべき文字とは、シングルクォート('), ダブルクォート("),バックスラッシュ (\) ,NUL (NULL バイト) ] mysql_real_escape_string [エンコードされる文字は NUL (ASCII 0), \n, \r, \, ', ", および Control-Z。その際、接続で使用している現在の文字セットが考慮されます] http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html >> ■質問3. http://php.net/manual/ja/pdo.prepared-statements.php 「プリペアドステートメントに渡すパラメータは、引用符で括る必要は ありません。それはドライバが自動的に行います。 アプリケーションで明示的にプリペアドステートメントを使用するように すれば、SQL インジェクションは決して発生しません (しかし、もし信頼できない入力をもとにクエリの他の部分を構築している のならば、その部分に対するリスクを負うことになります)。 」
その他の回答 (2)
- yuu_x
- ベストアンサー率52% (106/202)
JavaScript に埋め込む場合は、PHP 5.2.0 以降なら、json_encode が追加されている。それ以前なら自前で用意するしかない。
お礼
ありがとうございました。 JavaScriptに埋め込む場合は、参考にします!
- yuu_x
- ベストアンサー率52% (106/202)
SQLインジェクション以前に HTML 文書中に > < & を埋め込んでるようなら出直して来いって話。同様に、SQL で `message`='it's up to you.' なんて書くやつもいない。 htmlspecialchars はあくまで HTML の文法に従うために、同様に、mysql_real_escape_string は MySQL の文法に従うために[文字列に対して]用いる。 それが分かっていれば迷うことはない。それら関数の存在意義はただそれだけ。 以下余談。 上が分かっていれば # htmlspecialchars には ENT_QUOTES をした後 addslashes しておく必要がある なんて話は出てこない。実際始めて聞いて、読んで愕然。 もう一度言う htmlspecialchars は HTML の PCDATA に対して用いられるもので、JavaScript に対して用いられるものではない。 ENT_QUOTES での統一は、わざわざ切り替えるのが面倒だから、ということを意識して使うようにしたい。統一したところでさほど問題にならない、というだけ。 # マルチバイト文字の問題 くだらなすぎる。知らない人もいるから仕方ないけど。 そもそも、mb_ 以外はほとんど、シングルバイト関数。マルチバイトに対して用いる時点で問題が起こるのは当たり前だろう。UTF-8 でお茶を濁すこともあるけど、それと知って使うようにしたい。 参照先はあまり参考になるとは思えません。オリジナルリソースを読むなり、もう少しましな参考サイト、書籍を探してみてください。
お礼
># htmlspecialchars には ENT_QUOTES をした後 addslashes しておく必要があるなんて話は出てこない。 ありがとうございます。これだけ、はっきり書いていただくと、分かりやすくて助かります。
お礼
>htmlspecialchars の 第三引数 $charset のデフォルトは ISO-8859-1 で固定なため、省略した場合ほとんど使い物にならない。 今まで、何となく第三引数を設定していたのですが、デフォルトが ISO-8859-1 で固定とは知りませんでした。勉強になりましたー。 また、質問2、質問3で、教えていただいたURLが、自分が知りたい内容ズバリのページだったため、大変参考になりました。 ありがとうございました。