【问题标题】:Is it an XSS vulnerability to assign JavaScript variables with untrusted data on the client side?在客户端分配带有不受信任数据的 JavaScript 变量是否是 XSS 漏洞?
【发布时间】:2020-01-31 12:37:49
【问题描述】:

我想澄清一些关于 JavaScript 变量分配和 XSS 漏洞的事情。如果分配发生在客户端而不是服务器端,是否存在 XSS 漏洞?比如这样的:

//www.test.com/index.html?q=malcious-javascript;
<script>
var x = window.location.search.substr(1);
</script>

此时分配不受信任的数据是否是一个安全问题?请注意,这不是服务器端分配。

我的理解是,在这一点上它不会是一个安全问题,即使它在被认为不安全的 JavaScript 上下文中。由于它只是一个字符串,因此它不能被分解,这与在服务器端生成的动态 JavaScript 不同,它被发送到浏览器并呈现为 HTML。只要数据不会在没有适当转义策略(例如 HTML 输入值)的情况下在不安全的上下文中呈现,那么将不受信任的数据分配给客户端的 JavaScript 变量是安全的。

如果我上面的理解是错误的,这是一个 XSS 漏洞,有人可以提供一个实际的 XSS 攻击向量的答案,以便我自己查看以更好地理解它的执行。

【问题讨论】:

    标签: javascript xss


    【解决方案1】:

    它只是直接呈现为 HTML 而不进行任何清理的 XSS。

    例如,将用户输入设置为 innerHTML,或者将用户输入直接呈现为元素的属性。

    你不应该用你的x做的事情的例子:

    element.innerHTML = x;
    
    otherElement.innerHTML = '<div><button type="' + x '">Click me</button></div>';
    
    eval(x); // Just avoid eval overall.
    

    你可以用你的x做什么:

    element.innerText = x;
    
    otherElement.dataset.url = x;
    
    oneMoreElement.href = x;
    

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多