gpt4 book ai didi

javascript - 绕过 ASP.NET 中的查询字符串验证(XSS 预防)

转载 作者:行者123 更新时间:2023-11-28 08:38:46 25 4
gpt4 key购买 nike

我正在对分配给我的一个非常旧的项目执行安全评估,该项目使用 ASP.NET WebForms。基本上,网站周围放置了大量“后退”按钮,这些按钮会将用户重定向回上一页(基于返回 URL 值)。

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

为了解决这个问题,添加了验证 - 每当请求包含单引号 (')、双引号 (") 或 <> 符号时,就会抛出无效请求 URL 异常。我对安全场景,所以对我来说这听起来是一个很棒的方法。

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

提前致谢!

最佳答案

根据您的描述,您的 URL 格式为 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!') ,您仍然可以执行 XSS通过设置ReturnUrl到 JavaScript 协议(protocol) URL,例如 javascript:alert('foo') 。由于前者在您的项目中工作,听起来您项目中的代码正在执行某种 eval查询字符串值本身是不安全的,因为 eval 不应该在外部输入上使用,因为攻击者可以轻松地在此输入中注入(inject)他们想要的任何代码。

防止XSS在您的网站上,您应该对 ReturnUrl 执行某种验证范围。我会推荐以下内容。

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

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

关于javascript - 绕过 ASP.NET 中的查询字符串验证(XSS 预防),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com