我应该如何编码我的href属性在我的WebMatrix c#网站
本文关键字:我的 属性 href WebMatrix 网站 何编码 编码 我应该 | 更新日期: 2023-09-27 18:16:03
首先,我已经做了很多关于这个主题的阅读/研究,但我仍然有点困惑,关于这方面的最佳实践是什么。
我已经检查并阅读了以下所有关于这个主题的非常有用和信息丰富的页面:
https://www.owasp.org/index.php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet http://msdn.microsoft.com/en-us/library/ms437314.aspx如何在HTML中编码href属性
HttpServerUtility。UrlPathEncode vs HttpServerUtility。UrlEncode
这是我的设置(内容变量稍后将使用Html.Raw()
呈现):
content += "<a class='"contentLink'" href='"" + subRow.linkHref + "'" target='"_blank'">" + subRow.linkText + "</a>";
subRow.linkText
的编码足够简单(只需一个简单的htmlcode方法就可以确保这一点),但是我很困惑,就像其他人一样,如何编码给定资源的href属性(如上所示链接)和今天的最佳实践。
UPDATE:所有插入'href'属性的内容都是用户输入的。我想这样做,以便他们可以路径到他们在Google Drive或任何其他相关网站上发布的东西,甚至关系路径(以编程方式构建)到内部。pdf文件或图片,如果他们选择的话。
我确实得到了我可用的方法之间的差异,但我不确定我应该应用哪一个或多少个,以及以什么顺序应用?我应该用HttpUtility.HtmlAttributeEncode
吗?
这个问题的上下文是从希望我的站点不崩溃的角度出发的,当然,防止XSS。
更新:
我试图测试使用用户输入将javascript插入到url的各个部分,该用户输入稍后将在href
属性中使用,并且我注意到一些奇怪之处。
我目前正在测试这个编码设置:
content += "<a class='"contentLink'" href='"" + HttpUtility.HtmlEncode(HttpUtility.UrlPathEncode(subRow.linkHref)) + "'" target='"_blank'">" + HttpUtility.HtmlEncode(subRow.linkText) + "</a>";
实际上,首先我是url编码(使用UrlPathEncode),然后我是HTML编码。我相信这可能是正确的方法,因为HTML编码的文本将击中DOM,应该仍然呈现为URL (我认为)。
然而,正如我所说的,我注意到一些奇怪的事情。
- 我使用这个作为用户输入:
http://localhost:10226/home.cshtml?javascript:var a = "hi"; alert(a); void(0);
和没有javascript执行,但我不相信这一定是因为我的编码(也就是说,我可以看到先进的浏览器不再允许javascript从url运行,因为它是一个巨大的安全漏洞和不好的做法,一般来说,从我的理解,但是,当然,我不能依靠这个)。 点击链接后,显示使用这个测试用户输入的地址栏读:
http://localhost:10226/home.cshtml?javascript:var%20a%20=%20%22hi%22;%20alert(a);%20void(0);
,这就是我有点困惑的地方。从上面链接中显示的研究来看,UrlPathEncode
应该忽略?
之后的编码,但是您可以清楚地看到,%
对该url的查询字符串部分中的空格进行了编码。我想这是一件好事,但与我对文档的理解不一致。我想我还是很困惑,但是我尝试过的每个本地和外部链接都没有被破坏,也没有危险,所以我将继续使用这个,直到我对这个的理解得到澄清。
我不知道这是否适用于你正在尝试做的事情,因为阅读你的帖子给了我一些"分析瘫痪",但我可能能够提供不同的视角。我已经开始依赖于调用java脚本函数的实践,这应该在构建url字符串时为您提供更多选项。这是HTML:
<a class="link_looks_like_button" onclick=openWin("../SendMail/ContractorInfo",700,850);>Add/Update Contractor</a>
然后在我的Javascript中:
<script type="text/javascript">
function openWin(url, width, height)
{
myWindow=window.open(url,'_blank','width='+width+',height='+height);
myWindow.focus();
}
当然,现在你已经把它放在java脚本中了,你可以用firebug检查你的"url"字符串,并使用java脚本操作它。
我希望这对你有帮助。
这里是JSFiddle的链接:http://jsfiddle.net/fonsecat/gzzzU/25/