基于DOM的跨站点脚本示例:Java脚本未执行

时间:2018-02-15 10:05:37

标签: javascript dom xss

我最近阅读了以下关于基于DOM的XSS的文章:

https://www.netsparker.com/blog/web-security/dom-based-cross-site-scripting-vulnerability/

但是文章中提供的示例并没有像所描述的那样工作。我创建了HTML示例文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd” &GT;

<html>
    <head></head>
    <body>
        <script>
            document.write("<b>Current URL</b> : " + document.baseURI);
        </script>
        <h1> Welcome on my Example Page </h1>
    </body>
</html>

我已将上述文件放在JBoss服务器上部署的Web应用程序的应用程序文件夹中,并且我已从浏览器调用该资源(我已尝试过IE 11和Firefox)。 IE 11显示了生成的HTML内容,如下所示:

当前网址:未定义 欢迎来到我的示例页面

虽然Firefox会显示生成的HTML内容,如下所示:

当前网址:https://localhost:8443/ukvlei/example.html 欢迎来到我的示例页面

在这两种情况下,我都不能强迫任何浏览器在#符号之后执行java脚本函数,如本文所述。当我输入

https://localhost:8443/ukvlei/example.html#<script>alert(1)</script>

在浏览器的地址栏中,我得到以下HTML内容:

IE 11下的

当前网址:未定义 欢迎来到我的示例页面

Firefox下的

当前网址:https://localhost:8443/ukvlei/example.html#%3Cscript%3Ealert(1)%3C/script%3E 欢迎来到我的示例页面

我做错了什么,以至于我无法在任何浏览器中执行java脚本?

谢谢!

2 个答案:

答案 0 :(得分:1)

您无法通过decodeURIComponent运行URI,以便将URI语法转换回文本。

答案 1 :(得分:0)

我要感谢@scagood和@Quentin,在我的帮助下,我的问题得到了回答。所以,答案是:

1。)显然,文章中提供的示例已过时,因为它大约有三年了,所以: 2.)使用window.location.href而不是document.baseURI; 3.)要使示例在IE和Firefox下运行,请使用decodeURIComponent解码URL。

因此,工作示例HTML文件现在看起来像这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
    <head></head>
    <body>
        <script>
            document.write("<b>Current URL</b> : " + decodeURIComponent(window.location.href));
        </script>
        <h1> Welcome on my Example Page </h1>
    </body>
</html>