【发布时间】:2014-03-13 20:03:58
【问题描述】:
是否可以在以下上下文中注入和执行 javascript?还是终止 JavaScript 字符串?
- URL 被插入到 JavaScript 字符串中(双引号分隔)
- URL 是由浏览器而不是服务器端编码的 URL。 (为简单起见,仅使用 Firefox 和 Chrome)
- 永远不会对 URL 进行解码(无论是在 JavaScript 中还是在后端)
例子:
var baseURL = "http://example.com/?[USER CONTROLLED INPUT]";
请注意,提供以“\”结尾的字符串可能会导致未终止的字符串文字 JavaScript 错误。假设此错误不会影响用户输入的其他用途。
注意:浏览器 URI 编码目前有所不同。
给定以下网址:
example.com?!*'();:@&=+$,/?[]"%-.<>\^_`{|}~#
-
FireFox 27.01 提交:
http://example.com/?!*%27%28%29;:@&=+$,/[]%22%-.%3C%3E\^_%60{|}~# -
Chromium 32.0 提交:
http://example.com/?!*%27();:@&=+$,/?[]%22%-.%3C%3E\^_`{|}~#
【问题讨论】:
-
我怀疑
#是否真的被提交了。 :) -
如果您的服务器正在输出
[USER CONTROLLED INPUT],那么是的,用户可以输入";alert('foobar');_ = "来提醒“foobar”而不会破坏代码。如果它是由 javascript 构建的,那么它不会中断,除非它用于生成 html。 -
Gumbo:您在技术上是正确的。最好的一种正确。 Kevin:用户的特殊字符由浏览器进行 url 编码。结果是:"example.com/?%22;alert(%27foobar%27);_%20=%20%22";" 虽然它可能是一个混乱的字符串,但它不是 javascript 注入。
标签: javascript security xss code-injection url-encoding