代码之家  ›  专栏  ›  技术社区  ›  user2143356

这是否易受XSS攻击?

  •  1
  • user2143356  · 技术社区  · 9 年前

    我知道这很容易受到攻击,因为黑客可能会嵌入访问网站URL的图像,并使用“message”参数进行各种操作:

    <script>
    var message = // get message parameter from URL, e.g domain.com?message=hello+there
    document.write('Your message: ' + message);
    </script>
    

    ……但是黑客有没有任何方法可以利用它(在没有任何其他JS的情况下)做任何事情?:

    <script>
    function displayMessage(message) {
      document.write(message);
    }
    </script>
    

    显然,我可以在浏览器中打开控制台并键入任何内容,但黑客是否可以以某种方式调用JavaScript方法(仅使用此代码)?

    我知道如果网站的顶部也有代码,那么可以调用该方法,但是一个方法可以自己调用吗?

    顺便说一句,我并不打算这么做,它只是帮助我理解这一点。

    我试过什么?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Oriol    9 年前

    在第一代码中, message 是不受信任的字符串,可能包含恶意代码。将其解析为HTML可能会执行该代码:

    var message = '<img src="//" onerror="alert(\'You are pwned!\')" />';
    document.write('Your message: ' + message);

    第二个代码不同。这只是一个函数,它本身不运行任何东西。

    当然,如果使用不受信任的字符串调用它,则会遇到与第一个字符串相同的问题。因此,不要这样做。

    然而,攻击者不能调用任意函数。好吧,如果他们可以,那就意味着你已经被打败了,所以这已经不重要了。我的意思是,如果攻击者获得了足够的“特权”,可以调用 displayMessage ,为什么不打电话给它 document.write (或其他)直接?