2011-09-26 65 views
7

Tôi đang tạo một số HTML và tôi muốn tạo liên kết mailto XSS và an toàn cho nội dung cơ sở dữ liệu. Mã hóa thích hợp để sử dụng ở đây là gì? Cái này thế nào?Làm cách nào để mã hóa đúng liên kết mailto?

myLiteral.Text = string.Format(
    "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
    HttpUtility.UrlEncode(email_address), 
    HttpUtility.UrlEncode(subject), 
    HttpUtility.UrlEncode(body_message)); 

Tôi có nên sử dụng UrlEncode tại đây không? HtmlEncode? Làm những gì tôi đã làm, sau đó HtmlEncode toàn bộ? Tôi đang viết HTML của một URL, vì vậy tôi có một chút không rõ ràng ...

@Quentin, đây có phải là những gì bạn mô tả không? (Thay đổi & s để & kể từ khi tôi sắp HtmlEncode ...)

myLiteral.Text = 
    HttpUtility.HtmlEncode(HttpUtility.UrlEncode(
    string.Format(
     "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
     email_address, subject, body_message))); 
+0

Phiên bản đầu tiên của bạn gần như chính xác, ngoại trừ bạn nên bỏ mã hóa '&' s. Bạn đang gán nó cho thuộc tính Text. Nó sẽ chăm sóc mã hóa HTML trong nội bộ. Điều duy nhất bạn cần phải lo lắng là nó là một URI hợp lệ. –

+1

@ liho1eye: Tôi nghĩ điều đó chỉ đúng đối với ASP Literal nếu myLiteral.Mode == Encode, không phải là mặc định. Nhưng phiên bản thứ hai sẽ có hiệu ứng bạn đang đi, đúng không? –

Trả lời

6

Bạn đang đặt một số nội dung trong một URL, sau đó đại diện cho URL đó trong HTML. Vì vậy, URLEncode nó sau đó HTMLEncode những gì bạn nhận được từ URLEncode.

+0

Tôi đã thử .. là phiên bản thứ 2 của mã trong câu hỏi của tôi những gì bạn có trong tâm trí? –

+0

Tôi sẽ đi với cái đầu tiên. Hoặc kết hợp cả hai. Htmlattributeencoding toàn bộ giá trị và url mã hóa các giá trị được chèn vào url – Erlend

+0

@Yuck - Đây thực sự là câu trả lời. Câu thứ hai mô tả chính xác những gì cần phải làm. – Quentin

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