试图找到一个 XSS,为什么这块不执行?

信息安全 xss html
2021-09-04 01:59:03

代码

我已经看到这些类型的实例经常发生,我很好奇为什么(即使没有过滤器)它们不会执行......因为代码就在那里。每次发生这种情况时,我都注意到,当您在任何开发人员工具中检查标签时,这些标签都没有格式化所以从视觉上看,只是灰色文本我知道这是一个含糊不清的问题,内容/上下文不多,但在任何意义上,这样一个看似未经过滤的输入位置如何在没有 XSS 问题的情况下不可利用和呈现?

编辑:我使用了 Chrome(禁用 XSS 保护)、Firefox 和 Internet Explorer(当它过滤它认为是跨站点脚本的内容时会出现警告消息)。这显然以没有结果或解释而告终。

结果

这是我在您关注它时给出的元素示例。

1个回答

这与 XSS 过滤器没有任何关系,许多浏览器的相同行为就证明了这一点。这不是 queryString 的事情,它只是内容。答案很简单,让人放心。

通过.innerHTML=strHTML或 DOM 方法添加的内联脚本标签elm.appendChild(script)不执行。这意味着您可以整天注入恶意标签;除非这些标签作为硬编码的 HTML(可以在查看源代码中看到)在浏览器中出现,否则它们是良性的。

jQuery 的过度使用$(elm).html(strHTML)方法将运行脚本,但这仅仅是因为它解析字符串内容并将<script>标记内容发送window.eval()执行它函数。但默认情况下,动态脚本标签内容不会被执行。

您的示例使用 react,它有一个虚拟 DOM,它使用非 DOM 模型在内部协调现有页面 HTML 和动态 HTML。一旦找到更改,就会进行一系列小的 DOM 元素替换。同样,<script>通过 DOM添加标签不会执行标签内容,因此这在任何浏览器中都是安全的。

您仍然需要注意基于属性的“事件处理程序”,例如onerroronloadonmouseover等,但<script>somethiungBad()</script>如果它不是由服务器打印或由 jQuery “智能”添加的,则它是良性的。示例中使用的 React 框架可能会为您过滤那些有问题的属性,我不是 React 专家...