将超链接连接到字符串的正确方法

时间:2009-07-09 08:55:35

标签: asp.net

将字符串与内部网址正确连接的最佳方法是什么?这可以吗?

String.Format("This is the link: <a href={0}>{1}</a>", somevalue1, somevalue2)

或者它可能为注射攻击敞开大门?

那么如何在字符串中插入超链接?

我想我可以使用HyperLink类,但是有没有返回类对象的html代码的属性?

5 个答案:

答案 0 :(得分:6)

以下使用HyperLink并且应该有效。但是,考虑一下你是否真的需要一个中间字符串。

using System.Web.UI;
using System.Web.UI.WebControls;

using System.IO;

HyperLink link = new HyperLink(){NavigateUrl="http://stackoverflow.com", Text = "StackOverflow"};
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
link.RenderControl(htw);
sw.Close();
String rendered = sw.ToString();

答案 1 :(得分:3)

为避免HTML注入,您可以这样做:

String.Format("This is the link: <a href=\"{0}\">{1}</a>",
    HttpUtility.HtmlEncode(somevalue1), HttpUtility.HtmlEncode(somevalue2))

不要将UrlEncode用于HTML值(属性和文本),因为它看起来只是乱码。 UrlEncode用于查询字符串值,即page.aspx?param=value+that+has+been+encoded

答案 2 :(得分:1)

你错过了报价:

String.Format("This is the link: <a href=\"{0}\">{1}</a>", somevalue1, somevalue2)

答案 3 :(得分:1)

This文章讨论了如何使用HttpUtility.UrlEncode以安全的方式完成此任务。

答案 4 :(得分:0)

如果您将从客户端获得的内容设置为链接'!s href,它总是会导致注入攻击的后门。

您应该使用HttpUtility.UrlEncode对链接的查询字符串进行编码,以获取安全链接。