XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码。当用户浏览该页之时,嵌入当中Web里面的html代码会被运行,从而达到恶意攻击用户的特殊目的。javascript
为何会出现XSS呢,这个没什么好说的,确定是过滤不严,或者就是程序员以为XSS并无什么实际的用途,从而忽略了XSS攻击的产生。比方在一个搜索框里面,对于输入数据没有一点过滤的话。那么咱们提交如下这条语句
<script>alert(’test’)</script>
结果是什么,你们应该都知道,就是页面弹出了一个对话框。php
我记得当我刚開始对黑客技术产生兴趣的时候,那是的XSS还只在于娱乐的地步。
html
它经过给别人发送带有恶意脚本代码參数的URL,当URL地址被打开时,特有的恶意代码參数被HTML解析、运行。它的特色是非持久化,必须用户点击带有特定參数的连接才干引发。
既然是需要用户点击才干触发的跨站。那么这就要考验你的忽悠水平了,就像前段时间论坛出现的XSS攻击。就是经过转帐,而后被攻击者查看消息从而触发的一种反射型XSS攻击
再如:
http://searchb.dangdang.com/?key=f',true,1);alert(1);//
这个经常逛乌云的应该都不陌生,这就是一个典型的反射型XSS。需要诱使用户去点击该连接。xss代码并不存储在服务端。因此攻击并不能持续。java
常用測试方法:
对整个输入(特别强调的是。整个HTTP请求都是输入,数据库取来的数据事实上也是输入。程序员
HTTP请求包含GET、POST參数。COOKIE,URL,头部的REFERER等等)中每个地方都可以例如如下操做,
1. 本身构造一个惟一的串,好比:myxsstestxxxx
2. 将某个输入项(比方某个參数)替换为上面的串
3. 查看HTTP对应中是否有这个串。并记录下来
4. 依据HTML上下文决定,用哪一种类型串来尝试,尝试攻击串,而后又一次提交请求
5. 假设能够找到对应的攻击串说明漏洞是存在的 这里的关键在于第四步。因为server端可能会作一些限制,比方encode或者长度限制。測试的时候需要想办法看看可否绕过限制。数据库
这样的状况用户可能直接打开正常的页面就会看到被注入了
原理事实上也很是easy
XSS代码被提交给站点-->站点把XSS代码存储进数据库—>当该页面再次被请求时。server发送已经被植入XSS代码的数据给client—>client运行XSS代码
比較常见的样例是在留言板上插入XSS代码,前提固然是留言内容过滤不善
想内容中加入[/code]<script>alert(‘test’)</script>[/code]
这样就会弹出对话框。固然仅仅要是可以加入内容的地方,你都可以试试XSS,比方说QQ空间的装扮里面。有一个本身定义模块。你可以选择图片,而后加入例如如下代码
javascript:alert('XSS')"
固然,其可以运行的前提是服务端代码是这样写的
A=get[a]
<img src=$a>
利用方法还有很是多。比方现在兴起的XSS平台,新建一个项目,你就可以作很是多事情
编程
DOM是一个与平台、编程语言无关的接口,它赞成程序或脚本动态地訪问和更新文档内容、结构和样式,处理后的结果可以成为显示页面的一部分。DOM中有很是多对象。当中一些是用户可以操纵的,如uRI 。location,refelTer等。client的脚本程序可以经过DOM动态地检查和改动页面内容。它不依赖于提交数据到server端。而从client得到DOM中的数据在本地运行,假设DOM中的数据没有通过严格确认,就会产生DOM—based XSS漏洞。
DOM—based XSS攻击源于DOM相关的属性和方法。被插入用于XSS攻击的脚本。一个典型的样例例如如下:
HTTP请求http://www.Xss.com/hello.html?name=test使用下面的脚本打印出登陆用户test的名字,即
<SCRIPT>
var pos=docmnent.URL.indexOf(”name=”)+5;
document.write (document.URL.substring(pos,document.URL.1ength))。
< /SCRIPT>
假设这个脚本用于请求http://www.Xss.com/hello.html?浏览器
name=<script>alert(‘test’)</script>时,就
致使XSS攻击的发生。
当用户点击这个连接,server返回包括上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的document对象URL属性的值就是当前页而的URL。安全
在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本倒是JavaScript脚本,这使得<script>alert(‘test’)</script>成为页面终于显示的HTML文本。从而致使DOM—base XSS攻击发生。
xss
CSRF站外类型的漏洞事实上就是传统意义上的外部提交数据问题,通常程序猿会考虑给一些留言评论等的表单加上水印以防止SPAM问题,但是为了用户的体验 性。一些操做可能没有作不论什么限制,因此攻击者可以先预測好请求的參数,在站外的Web页面里编写javascript脚本伪造文件请求或和本身主动提交的表单 来实现GET、POST请求。用户在会话状态下点击连接訪问站外的Web页面,client就被强迫发起请求。 假设,各位看官想具体了解CSRF google it! 这里不过说了一些简单的XSS原理。算一个抛砖引玉吧。各位可以跟帖讨论,怎样发挥XSS的最大能力