将字符串与内部网址正确连接的最佳方法是什么?这可以吗?
String.Format("This is the link: <a href={0}>{1}</a>", somevalue1, somevalue2)
或者它可能为注射攻击敞开大门?
那么如何在字符串中插入超链接?
我想我可以使用HyperLink类,但是有没有返回类对象的html代码的属性?
答案 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对链接的查询字符串进行编码,以获取安全链接。