サイト上のフォームから入力された内容をテキストメールで送信する場合について。

スクリプトはPHP5.3です。現在勉強中です。

自由入力のフォーム⇒入力者へ確認のメールという流れで、
自由に入力されたフォームの中に記号類があればhtmlspecialcharsなどで
HTMLエンティティ化しますが、それをそのままテキストメールで送信するとエンティティされた内容で送信されます。
それでは見にくいので、これを再度記号に戻す
(たとえば、&lt; を < にreplaceする)というのはよい方法でしょうか?

メールのheaderにてtext/plainと指定していますが、これがtext/htmlと変更されてしまった場合(入力チェックはしていますが、何かしらの方法でヘッダーを改変または複数送信できたりするのでしょうか?)、やはり<script>などが動作してしまうのでしょうか?

(※全角など他の文字に置き換えるのは無しです。)

もしくはエンティティしたままhtmlメールで送信してしまった方がよいでしょうか?
ネットショップを利用しているとご注文確認などテキストメールで送られてくるところが
多いみたいなので、やはり現在もテキストメールで送るほうが主流なのでしょうか?

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/04/06 16:04:57
  • 終了:2012/04/07 12:30:33

回答(1件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252012/04/06 16:32:05

フォームからの入力データをHTMLエスケープしているのがそもそもの間違いで、そこはそのままのテキストで受け取って内部で利用するべきべきです。
HTMLエスケープは入力じゃなく出力(確認画面での表示やHTMLメールへの埋め込み時など)で行いましょう。

他2件のコメントを見る
id:htaccess404

そういえば、エンティティ文字がうまく表示できず文章が読みづらかったですね、すみません。

一応エスケープしたものを確認表示させてメールを配信するものを作っています。
テキストメール用にスケープしない場合、
メールのheaderにてtext/plainと指定していますが、
これを不正な入力か何かでtext/htmlへ改変またはヘッダーを複数指定することは可能なんでしょうか?

2012/04/06 19:35:32
id:y-kawaz

>これを不正な入力か何かでtext/htmlへ改変またはヘッダーを複数指定することは可能なんでしょうか?

そこを作ってるのは質問者さんなんですから、そうできないようなプログラムを書いてくださいとしか言えません。

2012/04/06 20:00:00

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません