跨站漏洞的测试案例
造成跨站攻击的原因,主要是由于网站服务端的程序,对客户的输入不进行有效验证,于是攻击者就可能会输入一些恶意的 Script 程序代码,由于网站程序保存攻击者的输入,并将它们展示给所有的浏览者,因此已输入的恶意代码就可能会对浏览者造成危害。
下面,我们来看一个仅有两个网页文件的网站,感性认识一下跨站攻击。
第一个网页名为“page1.asp”,通过使用一个提交表单或者 Cookie 信息来获取用户名,其代码如下:
<%@ language=vbscript %>
<% if request.cookies("username")<>"" then
dim strredirecturl
strredirecturl="page2.asp?username="
strredirecturlstrredirecturl=strredirecturl & response.cookies("username")
response.redirect(strredirecturl)
else %>
<form method="post" action="page2.asp">
请输入登录用户名:
<input type="text" name="username">
<input type="submit" name="submit" value="提交">
</form>
<% end if %>
第二个网页文件名为“page2.asp”,返回用户名并显示欢迎信息,其代码如下:
<%@ language=vbscript %>
<% dim strusername
if request.querystring("username")<>"" then
strusername = request.querystring("username")
else
response.cookies("username") = request.form("username")
strusername = request.form("username")
end if %>
<h3 align="center">欢迎<%= strusername %></h3>
在浏览器中打开第一个网页,随便输入一个用户名,可以看到在第二个网页中显示了欢迎信息。
现在,来做一个小试验,在用户名中输入前面的跨站代码:
<script>alert("这是一个跨站漏洞的测试")</script>
提交进入第二个网页后,将会看到弹出一个警告对话框。在下一次访问时,就算输入正常的用户名,这个警示标签同样会出现。这是因为上面的
Script 代码,在你第一次访问时后就已经写入在 Cookie 中了。
上面是一个简单的跨站攻击的范例。如果网页程序对用户输入的用户名过滤不严,因此用户可输入任意代码,那么攻击者可以提交 Script 语句,而网站程序都将它作为正常的用户名执行程序。
这里程序只是将 Script 语句代码写入了用户的 Cookie 信息中,但如果代码被保存并显示在网页中呢?那么岂不是所有的浏览者都会弹出这个警告框吗?如果攻击写入的不是弹出对话框代码,而是一段更具攻击性的语句呢?--跨站攻击,就是由此产生的。