跨站脚本攻击(Cross Site Scripting)指的是恶意攻击者往Web页面里插入恶意脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
为了与层叠样式表(Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。
为了更好地理解XSS攻击,我们需要搭建一个php环境,这里仍然推荐使用NPMserv,软件下载地址:http://down.51cto.com/data/1886128。
我们首先编写一个简单的php脚本文件info.php:
这段代码的意思是以get方法将参数name的值赋给变量username,然后再输出变量username的值。
将文件放到NPMserv下的www目录中,然后在客户端访问:
正常情况下,用户会在URL中提交参数name的值为自己的姓名,然后该数据内容会通过以上代码在页面中展示,如用户提交姓名为“张三”:
但是如果用户提交的数据中包含有可能被Web服务器执行的代码,那么就构成了XSS攻击。如用户提交的name值为<script>alert(/我的名字是张三/)</script>:
<script>……</script>是HTML中用于执行JavaScript语言的标记,因而只要黑客精心构造一些JavaScript语句,那么就可以达到相应的攻击目的了。
XSS攻击的原理和实现方法相比SQL注入要复杂一些,从攻击方式上分类,XSS主要有反射型和存储型。
反射型(外部攻击型)只对当前链接生效,需要用户点击恶意网站使得恶意脚本运行;
存储型(内部攻击型)网页程序本身xss漏洞,只要用户请求该网页就会受到影响。
反射型一般需要用户自行去触发,比如我们刚才所进行的XSS攻击就属于是反射型。另外,黑客也可以像图示中那样,将构造好的URL链接发送给正常的用户,让这些用户去执行XSS,从而获取这些用户的信息,比如cookie等。
存储型则是直接将xss语句插入到网站的正常页面中(通常都是留言板),然后用户只要访问了这些页面,就会自动执行其中的xss语句。
关于存储型的跨站将在下篇博文介绍。