2012-06-12 31 views
6

Tôi sắp gửi email html trong mã có thể chứa thông tin nhập của người dùng không an toàn. Tôi đã nhận thấy rằng nếu tôi html thoát khỏi chủ đề, GMail sau đó sẽ hiển thị nội dung thoát (vì vậy nếu chủ đề của tôi là "This & That", mà tôi khử trùng là "This & That", Gmail sẽ hiển thị thông tin sau). Cũng vậy với Thunderbird. Có an toàn để giả định rằng tất cả các ứng dụng email không cần HTML theo chủ đề đã thoát không?Đối tượng email có cần phải được mã HTML không?

Trả lời

5

Không cần mã hóa các thực thể HTML trong dòng chủ đề. Lý do mã hóa trong cơ thể HTML là nếu bạn đang sử dụng XHTML, bởi vì nó xuất phát từ XML, xử lý & làm ký tự dành riêng.

Tuy nhiên, dòng chủ đề của email không có trong HTML, XML hoặc XHTML. Nó chỉ là văn bản thuần túy. Vì lý do này, bạn không cần phải mã hóa ký hiệu và là &. Nếu bạn mã hóa nó, vì nó không được phân tích cú pháp dưới dạng HTML, nó sẽ được hiển thị dưới dạng mã hóa.

Nếu bạn muốn bao gồm các ký tự không phải ASCII (ví dụ: £), thì bạn cần mã hóa toàn bộ 'phong bì' (bao gồm nội dung email) làm UTF-8.

Vì vậy, trong mã, sau đây sẽ được hiển thị như:

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

NB: Microsoft Office có một thực hiện kỳ ​​lạ của UTF-8, vì vậy không phải tất cả ký tự UTF-8 sẽ làm việc.

+0

Mặc dù bạn không cần phải mã hóa HTML đối tượng, hãy đảm bảo vệ sinh nó cho ngữ cảnh trong: tiêu đề HTTP. Xóa các ký tự ngắt dòng như '\ n' và' \ r'! –

2

Trường Chủ đề là bên ngoài của "Nội dung HTML". Nó không liên quan gì đến HTML.


Tuy nhiên, tôi không có một tài liệu tham khảo cho việc này ...

2

Chủ đề của không cần phải html loại trừ tuy nhiên, họ có thể trốn thoát. Thông số SMTP gốc đã xác định rằng thư phải là ascii (RFC822 Phần 3). Điều này đã được xác nhận trong RFC2822 tuy nhiên, RFC2047 xác định tiện ích mở rộng tiêu đề cho phép bạn mã hóa các trường tiêu đề trong thư mime để cho phép văn bản không phải ascii.

Định dạng từ được mã hóa này cho phép bạn sử dụng mã hóa như utf-8 trong tiêu đề email. Ví dụ:

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

Đây là phiên bản mã hóa ISO-8859-1 của "đây là một số văn bản". Phương pháp này có thể được sử dụng để kích hoạt những thứ như ký hiệu bảng Anh (£) hoặc ký tự có dấu/không phải ascii.

Các vấn đề liên quan