如何正确编码mailto链接?

9

我正在生成一些HTML并且想要生成一个安全的mailto链接,以防止XSS和数据库内容。这里应该使用什么编码方式呢?下面是正确的编码方式:

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));

我应该在这里使用UrlEncode吗?还是HtmlEncode?我应该像我所做的那样,然后对整个内容进行HtmlEncode?我正在编写URL的HTML,所以有点不清楚... @Quentin,你描述的是这个吗?(将&更改为&,因为我即将进行HtmlEncode...)
myLiteral.Text = 
  HttpUtility.HtmlEncode(HttpUtility.UrlEncode(
    string.Format(
      "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
      email_address, subject, body_message)));

你的第一个版本几乎正确,除了你应该解码 &。你正在将它分配给 Text 属性。它应该在内部处理 HTML 编码。你唯一需要担心的是它是否是有效的 URI。 - Ilia G
1
@liho1eye:我认为这只适用于 ASP Literal,如果 myLiteral.Mode == Encode,则为真,这不是默认设置。但第二个版本应该会产生你想要的效果,对吗? - Scott Stafford
1个回答

9

您正在将某些内容放入URL中,然后在HTML中表示该URL。因此,请对其进行URLEncode,然后对从URLEncode获取的内容进行HTMLEncode。


我尝试了一下,第二个版本的代码是否符合你的意思? - Scott Stafford
我会选择第一个。或者两者混合使用。对整个值进行Htmlattributeencoding编码,并对插入到URL中的值进行url编码。 - Erlend
@Yuck — 这确实是一个答案。第二个句子准确地描述了需要做什么。 - Quentin
@ScottStafford — 刚刚看到这条评论(两年半后),"是的"。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接