代码之家  ›  专栏  ›  技术社区  ›  Imran Azad

JavaScript变量赋值XSS漏洞

  •  -1
  • Imran Azad  · 技术社区  · 6 年前

    我想澄清一下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攻击向量的答案,这样我就可以自己看看,更好地理解它的执行。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Mat Sz    6 年前

    只有当它直接呈现为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;