使用document.write显示window.location.search存在不安全/易受XSS攻击的风险吗?

4

我有一个页面,想要简单地将查询字符串传递到另一个页面。对于这个特定的客户端,没有可用的服务器端编程,只能使用HTML(我只能使用javascript/jquery)。他们有一个过程,想要传递一些参数到价格页面,就像这样:

http://www.mydomain.com/pricing.html?affiliate=123&store=345

在定价页面,我只想收集完整的查询字符串(?affiliate=123&store=345)并将其传递到应用程序页面:
http://www.mydomain.com/application.html?affiliate=123&store=345

如果我在价格页面上使用以下javascript来将链接传递到应用程序页面,我是否引入了任何跨站脚本或其他漏洞?

<script type="text/javascript">document.write('<a href="http://www.mydomain.com/application.html'+location.search+'">Apply Now</a>');</script>
2个回答

2

是的,您容易受到XSS攻击。

$("<a>").attr("href", 'http://www.mydomain.com/application.html'+location.search).text("Apply now").appendTo(document.body)

你介意展示一下它的漏洞在哪里吗?到目前为止,我的所有测试都表明location.search是由浏览器自动编码的。 - ews2001
1
你用的是哪个浏览器?不同的浏览器处理方式不同。这里有一个例子,Chrome会对其进行编码,但IE将会存在漏洞:http://research.insecurelabs.org/domxss/location.search.html?hello="onmouseover=alert(1)// - Erlend

0

简短回答,您并没有引入任何不存在的漏洞(因为您已经通过查询字符串将该信息传递到定价页面)。

更长的回答是,这取决于您在application.html页面中如何处理这些信息。如果您允许通过查询字符串传递的变量改变状态或访问服务器上受保护的信息,或者将它们输入未经验证的SQL查询中,那么是的,您正在引入漏洞。但是,仅仅通过使用不同的方法传递参数(即POST)是不会改变这一点的 - 这取决于您在获取数据后如何验证和使用数据的特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接