人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpのエスケープ処理についての質問です。バージョンは5.2.8。
POSTやGETに対しては
$_POST["test"] = htmlspecialchars(stripslashes($_POST["test"]));
としています。

SQLiteやMySQLに対しては
sqlite_escape_string()とか、mysql_real_escape_string()、
htmlspecialchars()や、stripslashes()、
nl2br()や、mb_convert_kana()など
レコードの挿入時や抽出時に何をどのような順序で行えばよいか分からず、お手上げ状態です。

こうしたら良いという意見やアドバイスをお願いします。

●質問者: yuki_28s
●カテゴリ:ウェブ制作
✍キーワード:MySQL PHP SQLite test アドバイス
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● atrem
●25ポイント

WEBで何かを入力させそれをDBに保存し、それを誰かが表示する。までを考えてみます。

※掲示板を考えてみるとイメージしやすいと思います。


1.投稿画面を表示→入力させる

2.投稿内容をDBに保存する

3.投稿した内容をだれかが表示する


といった流れが通常でしょうか。

この場合、2の時と3の場合にエスケープが必要です。


「2.投稿内容をDBに保存する」時は、mysql_real_escape_string()などを使用しエスケープします。

これは、SQLインジェクション対策といわれるものです。

ですが、できれば、バインド変数を使うことをお勧めします。


「3.投稿した内容をだれかが表示する」時は、必ずhtmlspecialcharsでエスケープします。

これは、クロスサイトスクリプティング対策といわれるものです。

場合によっては、2でDBに保存する前に、htmlspecialcharsしててもいいです。


↓このサイトが非常に参考になります。

@IT:クロスサイトスクリプティング対策の基本

◎質問者からの返答

回答ありがとうございます。

参考にさせて頂きました。

改行や半角カナとかの情報も知りたかったです。


2 ● b-wind
●25ポイント

「サニタイズ言うなキャンペーン」私の解釈

エスケープ処理をする場所の基本的な考えかたは上記サイトが分かりやすいかと思います。

考え方が理解できればそれぞれのケースでどの関数を使うべきかはおのずと見えてきます。

◎質問者からの返答

回答ありがとうございます。

「層」という考えは分かりやすかったです。

概念は何となく理解できましたが、実用性が欲しかったです。

参考にさせて頂きます。


3 ● kfujimi
●15ポイント

Smartyで文字を丸める - ハウグリー みんなでつくるレシピ

Smarty

Smarty : Smarty Documentation Search

PHP側でエスケープしてからDBへ格納する方法以外に、HTMLへアサインする際にSmartyを使用してそちらでエスケープする方法がありますので参考にしてみてください。

◎質問者からの返答

回答ありがとうございます。

少し複雑ですかね・・・。

どちらかと言えば、PHP側で処理する方法を探しています。

お手数おかけしました。


4 ● hijk05
●25ポイント

表示層(入力層)

プログラム層

DB層

まず、上記ですべてUTF8とかで統一されているのでしょうか?

統一されている場合とされていない場合では処理が変わります。

■改行

そのシステムのポリシーに依存します。一切変換を行わない場合があります。

■半角カナとかの情報も知りたかったです。

文字コードによります。UTF8で統一されてるのなら、意識する必要はないです。

◎質問者からの返答

回答ありがとうございます。

参考にさせて頂きます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ