使用 ASP.NET MVC,我有一个 url,它带有一个名为 path 的查询字符串参数,它可以是我站点中的一个 url。我发现了一个 XSS 漏洞,我不知道如何正确编码路径值以防止 XSS(但没有做很多代码来将可接受的 url 列入白名单)
所以用户访问的url是:
/iFrame?path=mypage.aspx
XSS可以这样看:
/iFrame?path=javascript:alert%281%29
使用路径查询字符串值的 iFrame 的 HTML 是:
<iframe src="@Model.Source"></iframe>
我也尝试过:
这两种方法仍然显示 javascript 警告框。
是否有用于 ASP.NET MVC 的内置编码器对其进行编码,以便 src 不会执行 javascript?还是我需要做一些白名单或其他方法来防止它?
最佳答案
我建议阅读 Preventing Open Redirection Attacks (C#)其中讨论了使用 ASP.NET MVC 3 UrlHelper 类中的 IsLocalUrl() 方法:
public bool IsLocalUrl(string url) {
return System.Web.WebPages.RequestExtensions.IsUrlLocalToHost(
RequestContext.HttpContext.Request, url);
}
System.Web.WebPages RequestExtensions 类中的 IsUrlLocalToHost() 方法:
public static bool IsUrlLocalToHost(this HttpRequestBase request, string url)
{
return !url.IsEmpty() &&
((url[0] == '/' && (url.Length == 1 ||
(url[1] != '/' && url[1] != '\\'))) || // "/" or "/foo" but not "//" or "/\"
(url.Length > 1 &&
url[0] == '~' && url[1] == '/')); // "~/" or "~/foo"
}
关于javascript - 如何编码值以放入 iframe src 属性以防止 ASP.NET MVC 中的 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022314/