POSTやGETに対しては
$_POST["test"] = htmlspecialchars(stripslashes($_POST["test"]));
としています。
SQLiteやMySQLに対しては
sqlite_escape_string()とか、mysql_real_escape_string()、
htmlspecialchars()や、stripslashes()、
nl2br()や、mb_convert_kana()など
レコードの挿入時や抽出時に何をどのような順序で行えばよいか分からず、お手上げ状態です。
こうしたら良いという意見やアドバイスをお願いします。
WEBで何かを入力させそれをDBに保存し、それを誰かが表示する。までを考えてみます。
※掲示板を考えてみるとイメージしやすいと思います。
1.投稿画面を表示→入力させる
2.投稿内容をDBに保存する
3.投稿した内容をだれかが表示する
といった流れが通常でしょうか。
この場合、2の時と3の場合にエスケープが必要です。
「2.投稿内容をDBに保存する」時は、mysql_real_escape_string()などを使用しエスケープします。
これは、SQLインジェクション対策といわれるものです。
ですが、できれば、バインド変数を使うことをお勧めします。
「3.投稿した内容をだれかが表示する」時は、必ずhtmlspecialcharsでエスケープします。
これは、クロスサイトスクリプティング対策といわれるものです。
場合によっては、2でDBに保存する前に、htmlspecialcharsしててもいいです。
↓このサイトが非常に参考になります。
エスケープ処理をする場所の基本的な考えかたは上記サイトが分かりやすいかと思います。
考え方が理解できればそれぞれのケースでどの関数を使うべきかはおのずと見えてきます。
回答ありがとうございます。
「層」という考えは分かりやすかったです。
概念は何となく理解できましたが、実用性が欲しかったです。
参考にさせて頂きます。
Smartyで文字を丸める - ハウグリー みんなでつくるレシピ
Smarty : Smarty Documentation Search
PHP側でエスケープしてからDBへ格納する方法以外に、HTMLへアサインする際にSmartyを使用してそちらでエスケープする方法がありますので参考にしてみてください。
回答ありがとうございます。
少し複雑ですかね・・・。
どちらかと言えば、PHP側で処理する方法を探しています。
お手数おかけしました。
表示層(入力層)
|
プログラム層
|
DB層
まず、上記ですべてUTF8とかで統一されているのでしょうか?
統一されている場合とされていない場合では処理が変わります。
■改行
そのシステムのポリシーに依存します。一切変換を行わない場合があります。
■半角カナとかの情報も知りたかったです。
文字コードによります。UTF8で統一されてるのなら、意識する必要はないです。
回答ありがとうございます。
参考にさせて頂きます。
回答ありがとうございます。
参考にさせて頂きました。
改行や半角カナとかの情報も知りたかったです。