是否可以仅使用 html 标签制作 xss

信息安全 javascript xss html
2021-08-15 02:25:56

我不知道所有的xss技巧..

在 Ruby on Rails 中编程时,使用sanitize 方法仅允许某些标签,并尽可能清除所有其他标签和脚本

剩下的标签是

    "small", "dfn", "sup", "sub", "pre", "blockquote", "ins", "ul", "var", "samp", "del",
 "h6", "h5", "h4", "h3", "h2", "h1", "span", "br", "hr", "em", "address", "img", "kbd",
 "tt", "a", "acronym", "abbr", "code", "p", "i", "b", "strong", "dd", "dt", "dl", "ol",
 "li", "div", "big", "cite"

是否可以使用这些标签的组合来创建 XSS 攻击?

4个回答

是的。这是微不足道的。

<div onmouseover="alert(1)" style="position:fixed;left:0;top:0;width:9999px;height:9999px;"></div>

不过,您可能希望在尝试之前保存您的工作 - 当您在屏幕上移动鼠标时,警报可能会重复显示。

当然,更好的攻击会涉及在div调用 JavaScript 后立即销毁它,以使其看起来合法。

您应该转义所有输出以避免这种情况。

是的,几乎所有 HTML 标签都允许您声明事件处理程序。当页面在没有用户交互的情况下加载时,可能会触发其中一些事件:

<img src=x onerror=alert(1) />

事件标签并不是触发 xss 的唯一方式:

<a href=javascript:alert(1)>xss</a>

一种可能的解决方案是为此页面设置内容安全策略

X-Content-Security-Policy: unsafe-inline

只要确保实际测试您的解决方案。不要听信任何人的话。(CSP 也是新的)

另一个选择是PHP 的 HTMLPurifer,它比 Ruby 的 Sanitize 更先进。

是的: <img onerror=alert(document.cookie) src=1 />

输出转义的要求因文档中的位置而异。例如,应在 HTML 属性中的文本必须以不同于'"应在 HTML 元素中的文本 ( ) 转义 ( ) <>OWASP Enterprise Security API (ESAPI) 是处理这个问题的好方法,因为它为所有不同的上下文提供了转义机制Ruby 版本可以在 Github上找到。

有关包含许多 HTML XSS 攻击的优秀“备忘单”,请参见此处:OWASP.org 他们非常有创意。值得使用该表在构建站点时对其进行测试,并在该列表更新时不时进行检查。

希望能帮助到你!