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

サイト上のフォームから入力された内容をテキストメールで送信する場合について。
スクリプトはPHP5.3です。現在勉強中です。

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

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

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

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

よろしくお願いします。

●質問者: htaccess404
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y-kawaz

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


htaccess404さんのコメント
表現が間違えてましたすみません。 出力時にテキストメールの場合、エスケープされた文字(たとえば、<は&lt;)で出力されてしまいますが、それをまたテキストメールであれば元に戻して出力するのは大丈夫なのでしょうか? 詳細は上記質問にて。

y-kawazさんのコメント
>出力時にテキストメールの場合、エスケープされた文字(たとえば、<は<)で出力されてしまいますが、 そこがおかしいんじゃないでしょうか? テキストメール用の出力の時はHTMLエスケープをしなければよいだけです。 テンプレート処理か何かの都合で必ずHTMLエスケープされてしまうとかですか? であればそのテンプレートエンジンをテキストメール用に使うのが間違いです。 まぁ、本当にテキストとして表示されるだけであればHTMLエスケープの逆変換をしてもセキュリティ上、特別問題になることは少ないとは思うので、逆変換でしか対応できないのであればそれで良しとしても良いと思います。

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

y-kawazさんのコメント
>これを不正な入力か何かでtext/htmlへ改変またはヘッダーを複数指定することは可能なんでしょうか? そこを作ってるのは質問者さんなんですから、そうできないようなプログラムを書いてくださいとしか言えません。
関連質問

●質問をもっと探す●



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