2012-06-12 3 views
6

安全でないユーザー入力を含む可能性があるコードでhtml電子メールを送信しようとしています。私はhtmlで件名をエスケープするとGmailにエスケープされたコンテンツが表示されることに気付きました(件名が"This & That"の場合は"This & That"として消毒します)。同じことがThunderbirdにも当てはまります。すべての電子メールクライアントは、件名のHTMLをエスケープする必要はないと想定するのは安全でしょうか?メールの件名をHTMLでエスケープする必要がありますか?

答えて

5

件名にHTMLエンティティをエンコードする必要はありません。 HTML本体でエンコードする理由は、XMLから派生したXHTMLを使用している場合、&を予約文字として扱うためです。

ただし、電子メールの件名はHTML、XML、またはXHTMLではありません。それは単なる純粋なテキストです。このため、アンパサンドを&としてエンコードする必要はありません。エンコードした場合、HTMLとして解析されていないため、エンコードされて表示されます。

非ASCII文字(例:£)を含める場合は、エンベロープ全体(メール本文を含む)をUTF-8としてエンコードする必要があります。

ので、コードの中で、次のようにのように表示されます。

 | Subject Line | Body 
==================================== 
& | &  |  &  
&  |  &  |  & 
UTF-8 £ |  £  |  £ 
ASCII £ |  n/a  | n/a 
£ | £ |  £ 

NB:Microsoft OfficeはUTF-8の奇妙な実装を持っているので、すべてのUTF-8文字が動作するではありません。

+0

対象をHTMLエンコードする必要はありませんが、対象のコンテキスト(HTTPヘッダー)に対して必ず対象を暗号化してください。 '\ n'や' \ r'のような改行文字を削除してください! –

2

件名フィールドは、「HTMLコンテンツ」の以外のです。 HTMLとは関係ありません。


しかし、私はこのための参照を持っていない...

2

件名のHTMLは、しかし、彼らはエスケープすることができますエスケープする必要はありません。オリジナルのSMTP仕様では、メッセージはASCIIであることが定義されています(RFC822セクション3)。これはRFC2822で確認されましたが、RFC2047では、mimeメッセージ内のヘッダーフィールドをエンコードして非ASCIIテキストを許可できるヘッダー拡張を定義しています。

このコードワード形式では、電子メールヘッダー内にutf-8などのエンコードを使用できます。たとえば、

=?iso-8859-1?q?this=20is=20some=20text?= 

これは「this is some text」のISO-8859-1でエンコードされたバージョンです。このメソッドは、ポンド記号(£)やアクセント付き/非アスキー文字のようなものをエンコードするために使用できます。

関連する問題