javascript - 如何编码值以放入 iframe src 属性以防止 ASP.NET MVC 中的 XSS

标签 javascript asp.net asp.net-mvc iframe xss

使用 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/

相关文章:

javascript - 在 React 中使用动态属性的问题

c# - 如何从网址下载所有文件?

asp.net - 从 ASP.Net 页面将 NetworkCredential 传递给 C# 中的 HttpWebRequest

c# - 从 Spark 迁移到 Razor

javascript - 在 mvc razor View 中对文本框使用 onblur() 事件

c# - 路径 '/' 的 Controller 未找到或未实现 IController

javascript - 我的项目中无法识别的 JS 脚本

javascript - 单击提交按钮后,我正在检查条件,如果失败如何停止提交过程?

javascript - phantomjs 中的元素为 null

c# - 捕获 ASP.NET 中的自定义错误