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

PHPでフォームからデータを受け取り保存するプログラムを書いています。
XSSとか気にしながら書いています。
データベースへの接続はPDOでやっています。

htmlspecialcharsは、データベースに保存したデータを表示する時に利用することはわかりました。

ただ、わからない事は、フォームのテキストボックスに一度保存したものを呼び出し初期値としてvalueにセットしています。そして、必要に応じてそのフォームの内容を変更して保存します。

この時、テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。

これを再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか。

それとも保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか。

なお、htmlspecialcharsを利用するときにはENT_QUOTESをオプションで指定しています。
それから、文字コードはUTF8を使っており、プリペアドステートメントを使ってSQLを構築しています。

●質問者: 匿名質問者
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号

テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。

valueに&ampを入れるとテキストボックスには&と表示されます
簡単な例を作りましたので確認してみてください

<html>
<body>
 <form method="get">
 <input type="text" name="input1" size="30" value="&lt;a&gt;"><br />
 <input type="text" name="input2" size="30" value="&amp;"><br />
 <input type="submit" />
 </form>
</body>
</html>

再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか

クライアントで何が行われているかはわからないのでバリデーションは常に必要です

保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか

valueに&ampを入れるとテキストボックスには&と表示されて&が送信されます
<>’”なども同様です
上に書いたフォームをsubmitしてみるとアドレス欄に結果が現れるので確認してみてください
保存前のhtmlspecialchars_decodeは不要で、表示する時にまたhtmlspecialcharsが必要なことがわかるはずです


匿名質問者さんのコメント
ありがとうございます。 追加でおしえてください。 保存前のhtmlspecialchars_decodeは不要とのことですが、逆にどのような場合にhtmlspecialchars_decodeは使えばよいのですか?

匿名回答1号さんのコメント
逆も何もありません 今回の話では不要だから不要ただそれだけです 今回は関係の無かったhtmlspecialchars_decodeですがHTMLファイルを直接読み込んで処理するといった場面で必要になってきますので存在は覚えておくと良いですね
関連質問

●質問をもっと探す●



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