【问题标题】:Bypassing query string validation (XSS prevention) in ASP.NET在 ASP.NET 中绕过查询字符串验证(XSS 预防)
【发布时间】:2014-01-12 05:04:10
【问题描述】:

我正在对分配给我的一个非常古老的项目执行安全评估,该项目使用 ASP.NET WebForms。基本上,站点周围有很多“返回”按钮,这些按钮会将用户重定向回上一页(基于 Return Url 值)。

我发现的问题是按钮功能是用 JavaScript 编码的,周围有标签,这意味着你可以简单地使用类似“;alert('INSECURE!');”的东西在返回 url 的末尾,它会在单击按钮后立即执行脚本。

为了清理它,添加了验证 - 每当请求包含单引号 (')、双引号 (") 或 符号时,都会引发 Invalid Request URL 异常。我对安全场景,所以对我来说这听起来是一个很棒的方法。

不幸的是,正如我所说,在 XSS 预防方面我是初学者。有没有人做过类似的事情并且知道这种方法的漏洞? (是的,我进行了研究。花了几个小时研究不同的材料和技术,但找不到任何类似的东西,但也不太过时)。

提前致谢!

【问题讨论】:

  • 这不是一个绝妙的方法。防止各种形式的 XSS 涉及确保用户提供的内容针对其注入的每个上下文(HTML、JavaScript、SQL、日志文件等)进行适当的中和。
  • 您可能想查看ASP.NET anti-XSS library,它是由对 XSS 有更多了解并知道他们在 ASP.NET 上下文中做什么的人开发的

标签: javascript asp.net security xss


【解决方案1】:

您可以将验证与文本框过滤器结合使用,以确保输入的数据是您想要的。

Walkthrough: Validating User Input in a Web Forms Page

FilteredTextBox Demonstration

此外,您可以在表单中添加验证码。

【讨论】:

    【解决方案2】:

    从您的描述看来,您的网址格式为www.example.com/page.aspx?ReturnUrl=foo.aspx

    我使用以下 JavaScript 代码对此进行了测试

    <a href="javascript:document.location = decodeURIComponent(document.location.search.substring(document.location.search.indexOf('ReturnUrl=') + 10));">Back</a>
    

    发现虽然这适用于普通 URL 并且不允许附加代码(例如 ;alert('INSECURE!')),但您仍然可以通过将 ReturnUrl 设置为 JavaScript 协议 URL(例如 javascript:alert('foo'))来执行 XSS。由于前者在您的项目中工作,听起来您项目中的代码正在对查询字符串值执行某种eval,这本身是不安全的,因为 eval 不应用于外部输入,因为攻击者可以轻松注入他们想要在此输入中的任何代码。

    为了防止您的站点出现XSS,您应该对ReturnUrl 参数执行某种验证。我会推荐以下。

    • 应使用与上述类似的代码,其中将location 设置为该值,而不是对查询字符串进行任何类型的代码评估。
    • 验证参数以确保只允许相对 URL。这也将有助于保护您的网站免受Unvalidated Redirects and Forwards 的侵害。一种简单的方法是验证 URL 不包含“:”字符,这将停止切换协议或域。例如。这将防止协议从 http:/https: 更改为 javascript: 或其他任何内容。 Technically this character is valid 在 URL 的路径部分,但这种情况极为罕见,如果您知道自己没有在您网站的任何页面名称中使用它,那么这是一种非常好的验证技术。
    • 如果您愿意,可以放弃单引号 (')、双引号 (") 和尖括号 (&lt;&gt;) 验证检查,因为您现在正在验证 URL 是否是相对的,而您的代码不是更长的evaluating。

    在上述检查中,如果验证失败,您仍然可以抛出 Invalid Request URL exception

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多