深圳产品型网站建设,北京建设招聘信息网站,湘阴网站设计,让网站百度不到一、 XSS攻击原理
XSS原称为CSS(Cross-Site Scripting)#xff0c;因为和层叠样式表(Cascading Style Sheets)重名#xff0c;所以改称为XSS(X一般有未知的含义#xff0c;还有扩展的含义)。XSS攻击涉及到三方#xff1a;攻击者#xff0c;用户#xff0c;web server。用…一、 XSS攻击原理
XSS原称为CSS(Cross-Site Scripting)因为和层叠样式表(Cascading Style Sheets)重名所以改称为XSS(X一般有未知的含义还有扩展的含义)。XSS攻击涉及到三方攻击者用户web server。用户是通过浏览器来访问web server上的网页XSS攻击就是攻击者通过各种办法在用户访问的网页中插入自己的脚本让其在用户访问网页时在其浏览器中进行执行。攻击者通过插入的脚本的执行来获得用户的信息比如cookie发送到攻击者自己的网站(跨站了)。所以称为跨站脚本攻击。XSS可以分为反射型XSS和持久性XSS还有DOM Based XSS。(一句话XSS就是在用户的浏览器中执行攻击者自己定制的脚本。)
1.1 反射型XSS
反射性XSS也就是非持久性XSS。用户点击攻击链接服务器解析后响应在返回的响应内容中出现攻击者的XSS代码被浏览器执行。一来一去XSS攻击脚本被web server反射回来给浏览器执行所以称为反射型XSS。
特点
1 XSS攻击代码非持久性也就是没有保存在web server中而是出现在URL地址中
2 非持久性那么攻击方式就不同了。一般是攻击者通过邮件聊天软件等等方式发送攻击URL然后用户点击来达到攻击的
1.2 持久型XSS
区别就是XSS恶意代码存储在web server中这样每一个访问特定网页的用户都会被攻击。
特点
1 XSS攻击代码存储于web server上
2 攻击者一般是通过网站的留言、评论、博客、日志等等功能(所有能够向web server输入内容的地方)将攻击代码存储到web server上的
有时持久性XSS和反射型XSS是同时使用的比如先通过对一个攻击url进行编码(来绕过xss filter)然后提交该web server(存储在web server中), 然后用户在浏览页面时如果点击该url就会触发一个XSS攻击。当然用户点击该url时也可能会触发一个CSRF(Cross site request forgery)攻击。
1.3 DOM based XSS
基于DOM的XSS也就是web server不参与仅仅涉及到浏览器的XSS。比如根据用户的输入来动态构造一个DOM节点如果没有对用户的输入进行过滤那么也就导致XSS攻击的产生。过滤可以考虑采用esapi4js。
参见http://www.freebuf.com/articles/web/29177.html http://www.zhihu.com/question/26628342/answer/33504799
二、 XSS 存在的原因
XSS 存在的根本原因是对URL中的参数对用户输入提交给web server的内容没有进行充分的过滤。如果我们能够在web程序中对用户提交的URL中的参数和提交的所有内容进行充分的过滤将所有的不合法的参数和输入内容过滤掉那么就不会导致“在用户的浏览器中执行攻击者自己定制的脚本”。
但是其实充分而完全的过滤实际上是无法实现的。因为攻击者有各种各样的神奇的你完全想象不到的方式来绕过服务器端的过滤最典型的就是对URL和参数进行各种的编码比如escape, encodeURI, encodeURIComponent, 16进制10进制8进制来绕过XSS过滤。那么我们如何来防御XSS呢
三、 XSS 攻击的防御 原则宁死也不让数据变成可执行的代码不信任任何用户的数据严格区分数据和代码。 XSS防御的总体思路是对输入(和URL参数)进行过滤对输出进行编码。
也就是对提交的所有内容进行过滤对url中的参数进行过滤过滤掉会导致脚本执行的相关内容然后对动态输出到页面的内容进行html编码使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过但是也还是会拦截很大一部分的XSS攻击。 对输入内容的特定字符进行编码例如表示 html标记的 等符号。 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie此 HTTP头由服务端设置。 将不可信的值输出 URL参数之前进行 URLEncode操作而对于从 URL参数中获取值一定要进行格式检测比如你需要的时URL就判读是否满足URL格式。 不要使用 Eval来解析并运行不确定的数据或代码对于 JSON解析请使用 JSON.parse() 方法。 后端接口也应该要做到关键字符过滤的问题。 使用XSS Filter