匿名質問者

PHPでフォームからデータを受け取り保存するプログラムを書いています。

XSSとか気にしながら書いています。
データベースへの接続はPDOでやっています。

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

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

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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/19 03:25:04

回答1件)

匿名回答1号 No.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は使えばよいのですか?

2013/09/12 09:52:15
匿名回答1号

逆も何もありません
今回の話では不要だから不要ただそれだけです

今回は関係の無かったhtmlspecialchars_decodeですがHTMLファイルを直接読み込んで処理するといった場面で必要になってきますので存在は覚えておくと良いですね

2013/09/15 09:21:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません