【问题标题】:Is JavaScript Injection possible if the URL is inserted into a JavaScript string?如果将 URL 插入到 JavaScript 字符串中,是否可以进行 JavaScript 注入?
【发布时间】: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


【解决方案1】:

如果这是唯一的注入点,那么我必须同意你的假设,即唯一可能造成的损害是未终止的 JavaScript 字符串文字。

但是,如果有多个注入点,i。例如,三个或更多,在一行中,如下所示:

var x = "[USER CONTROLLED INPUT]", y = "[USER CONTROLLED INPUT]", z = "[USER CONTROLLED INPUT]";

可以注入 JavaScript 代码:

x = \
y = +alert(1)+
z = //

因为这会导致:

var x = "\", y = "+alert(1)+", z = "//";

要求注入点都在一行JavaScript doesn’t allow literal line breaks in string literals

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2017-11-14
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多