我最近阅读了以下关于基于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脚本?
谢谢!
答案 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>