跨站点攻击-跨站点脚本攻击(XSS)

作者:vkvi 来源:ITPOW(原创) 日期:2009-9-28

跨站点脚本攻击(XSS:Cross Site Script,为了与层叠样式表单 CSS 区别,这里缩写为 XSS),以 ASP 为例,有一个搜索页,其中有代码:

<input type="text" size="20" name="key" value="<%=Request.QueryString("key")%>" />

关键词通过 GET 提交,然后又在关键词框中显示。看起来正常,实际上,因为输出时没有转换,就会造成问题。比如我直接在浏览器中构造 key 为:

"><script>alert("")</script>

最终结果就是:

<input type="text" size="20" name="key" value=""><script>alert("")</script>" />

此时 JavaScript 就会起作用,其 alert 就会弹出一个框。

这有什么危害?

是啊,这个 JavaScript 不就弹出一个对话框么,有什么危害?

攻击者肯定不会构造那么简单的脚本,他可以构造一个特殊的 JavaScript,该 JavaScript 访问网站后台的一个页面,假设这个页面的功能是初始化数据库;然后攻击者诱使管理员点击,比如告诉管理员去访问一个页面,该页面中有个 Flash,该 Flash 就是弹出一个窗口,窗口的地址就是攻击者精心构造的 URL;如果此时管理员此时恰好是登录状态,那么初始化数据库这个页面权限验证就会得到通过,数据库就被……

您可能会说,我的后台的初始化数据库页面很复杂,需要判断 Request.Form("confirm") 是否等于 yes。而 JavaScript 的 location.href = url,不能 POST 数据,只能将 GET 数据写在 URL 中,所以我的后台是安全的。其实不然,攻击者不一定通过 location.href 来访问一个页面,它可以用 Ajax,悄悄地就把数据 POST 过来了。

或者攻击者也可以利用这个在页面中嵌入木马,然后把这个 URL 发给普通访问者,普通访问者一看,这个 URL 前面是可信任的网址开头的,所以放心去点击,结果中招。

怎么防范?

输出到页面时先用 Server.HTMLEncode 编码,输出到超链接时用 Server.URLEncode 编码。


相关文章