我今天偶然发现了这个链接,它确实在最初打算用于的站点上运行XSS:
https://<site>/<page>.html/?#prettyPhoto=Not_FeelIng_Safe&%3Cimg%20src=%27x%27%20onerror=alert%287%29%3EB我在我的站点上尝试了这一点,该站点在img、alert和onerror上将请求过滤配置为404,但是这个URL是允许的。
我添加了#来拒绝规则,我还在QueryStrings选项卡中作为拒绝序列添加了它,但它仍然是允许的。大概是因为#是特别的,它之后的任何东西都不算作URL或Querystring。
如果我们的站点(S)不需要它,那么阻止#是明智的吗?如果是的话,我如何在IIS7上拒绝#呢?
发布于 2015-06-16 11:43:32
#后面的字符串是“片段标识符”,通常用于导航到HTML中的锚元素(但这里用于模拟单页应用程序中的URL导航)。
片段标识符完全由浏览器客户端使用,甚至不包括在对web服务器的请求中,因此您不能在IIS或任何其他服务器中的服务器端过滤它。
(您不应该依赖ASP.NET请求筛选来获得安全性。这只是它失败的地方之一。)
您可以尝试在客户端“过滤”它,方法是在任何其他脚本之前包含一个<script>运行,这样会破坏页面,如果它在location.hash中检测到任何“坏”的东西,就拒绝加载任何脚本,但这仍然会受到所有相同的黑名单输入嗅探失败模式的影响,这使得请求验证浪费了每个人的时间。
发布于 2015-06-17 05:31:27
这是什么浏览器?这应该是自动阻止色度XSS过滤器。我认为第一步是建立一个适当的CSP https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_内容_安全性_政策
在开始减少与妥协相关的风险后,比如使用http只使用cookies、CSRF令牌,然后开始执行bobince建议的客户端过滤器。
https://security.stackexchange.com/questions/91740
复制相似问题