javascript - 定义内联 javascript 表达式的替代方法

标签 javascript css expression xss

我一直在学习网络应用安全渗透测试。该场景是,在为练习而开发的测试环境演示 Web 应用程序中存在跨站点脚本漏洞。我有一个基于 javascript 表达式的 xss 负载:

<div style="width: expression(alert(/XSS/))"></div>

我知道这些表达式自 IE 8 以来已被弃用。它在 IE7 中工作正常。所以,当我输入上面的有效负载时,Web 应用程序返回

<div></div>

它剥夺了所有其他属性和值。但是当我像这样改变有效载荷时

<div style="width: expression'(alert(/XSS/))'">

它不是有效负载意味着它不会执行。所以,我想弄清楚是否有任何替代方法可以在内联样式属性中定义表达式,比如我们是否可以放置 single_quote 以外的其他东西,而不会破坏代码。或者如果有任何其他方法可以通过样式属性执行 javascript。

最佳答案

expression() 是动态指定 html 节点属性的唯一方法。它需要任何有效的 JScript表达式作为参数。所以从技术上讲,没有办法通过 html 节点上的样式属性执行 javascript (JScript !== javascript)。

此功能不存在(或已弃用)的原因是它会造成相当大的安全漏洞。如果你想拥有动态的 html 元素,你可以用 css 来解决这个问题,特别是通过 media queries .但如果你想沿着这条路走下去,请尝试查看 expression()文档。

在 javascript(以及 JScript)中,() 调用一个函数。因此,在调用表达式名称之前,在表达式名称之后抛出 '" 是无效语法。除了“single_quote”之外,您可能还可以放置其他不会破坏代码的内容, 但您不会将它放在 () 之前。尝试查找 JScript 语法。这里有一个 last resource 可能会有所帮助。

关于javascript - 定义内联 javascript 表达式的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647901/

相关文章:

css - 应用粘性位置

html - 使用 Firefox 和 100% 宽度将元素居中对齐

html表格,如何使顶部列刚好适合内容的高度,下面的列占据其余部分

c++ - 为什么这个复合语句作为由大括号和括号括起来的语句序列似乎不是有效的语句表达式

java - 混合表达式和表达式语言(<%= %> 在 c :if) 内部

javascript - 在函数内传递 JSON 对象

javascript - 渲染相同类型 subview 的主干 View 会导致无限循环

ios - 相同的表达式在 Objective-C 和 Swift 中返回不同的值

javascript - 在 html css javascript jquery 中创建导航菜单?

javascript - Meteor:响应式(Reactive)辅助函数。依赖选择