安全でないユーザー入力を含む可能性があるコードでhtml電子メールを送信しようとしています。私はhtmlで件名をエスケープするとGmailにエスケープされたコンテンツが表示されることに気付きました(件名が"This & That"
の場合は"This & That"
として消毒します)。同じことがThunderbirdにも当てはまります。すべての電子メールクライアントは、件名のHTMLをエスケープする必要はないと想定するのは安全でしょうか?メールの件名をHTMLでエスケープする必要がありますか?
答えて
件名に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文字が動作するではありません。
件名フィールドは、「HTMLコンテンツ」の以外のです。 HTMLとは関係ありません。
しかし、私はこのための参照を持っていない...
件名の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でエンコードされたバージョンです。このメソッドは、ポンド記号(£)やアクセント付き/非アスキー文字のようなものをエンコードするために使用できます。
- 1. "||"をエスケープする必要があります文字列からの条件
- 2. PDO:文字列をエスケープする必要がありますか?
- 3. クロスサイトスクリプティング(XSS):アンパサンドをエスケープする必要がありますか?
- 4. ロゴはHTMLメールの別の画像にする必要がありますか?
- 5. PHP fopen($ file)$ファイルはエスケープする必要がありますか?
- 6. AWSの "Fn :: Base64:!Sub"で何かをエスケープする必要がありますか?
- 7. mediawiki mathjaxエスケープを使用する必要があります。$ x $
- 8. 電子メールを送信するときに文字をエスケープする必要がありますか?
- 9. コンポーネントをhtmlタグでラップする必要がありますか?
- 10. メインアクティビティ名は.MainActivityである必要がありますか?
- 11. Elasticsearchクエリで予約文字をエスケープする必要がありますか?
- 12. 設定ファイルでバックスラッシュをエスケープする必要がありますか?
- 13. 正規表現でピリオドをエスケープする必要がありますか?
- 14. sequelize(node.js)でエスケープ文字列を使用する必要がありますか?
- 15. なぜJavaソースファイルでUnicodeをエスケープする必要がありますか?
- 16. matches()でjava正規表現をエスケープする必要がありますか?
- 17. text/plainまたはtext/javascriptからエスケープする必要がありますか?
- 18. Facebookのデータをエスケープしてサニタイズする必要がありますか?
- 19. パーセント記号(%)は常にHTMLでエスケープする必要がありますか?
- 20. ハイフンは正規表現でエスケープする必要がありますか?
- 21. 入力パラメータを1つずつエスケープするか、SQLクエリ全体をエスケープする必要がありますか?
- 22. HTML文字列、JSPページ、またはサーブレットはどこからエスケープする必要がありますか?
- 23. タイトルタグをHTMLエンコードする必要がありますか?
- 24. HTMLサーバーサイドインクルードを使用する必要がありますか?
- 25. Alfresco FTS - なぜフォルダの名前の最初の数字をエスケープする必要がありますか?
- 26. 正規表現 - ハイフンをエスケープする必要がありますか?
- 27. htmlでファイルをドラッグアンドドロップする必要があります
- 28. jspdfでhtmlをPDFにレンダリングする必要があります
- 29. PlayパラメータでHTMLをレンダリングする必要があります
- 30. PHP:openofficeでメールをどのようにマージする必要がありますか?
対象をHTMLエンコードする必要はありませんが、対象のコンテキスト(HTTPヘッダー)に対して必ず対象を暗号化してください。 '\ n'や' \ r'のような改行文字を削除してください! –