首先要说明的是 它是webkit的一个模块,而非chrome ,所以Safari和360安全浏览器极速模式等webkit内核的浏览器都有XSS过滤功能.
过滤方式:
通过模糊匹配 输入参数(GET query| POST form data| Location fragment ) 与 dom树,如果匹配中的数据中包含跨站脚本则不在输出到上下文DOM树中.另外,匹配的规则跟CSP没有什么关系,最多是有参考,CSP这种规范类的东西更新速度太慢跟不上现实问题的步伐.
关闭模式:
因为它有可能影响到业务,所以浏览器提供了关闭它的HTTP响应头.
X-XSS-Protection: 0
绕过方式:
因为专门做这方面的原因所以对绕过也有所了解,目前我发布过的一个bypass 0day还可以继续使用.
svgscript xlink:href=data:,alert(1)/script/svg
1、基于特征的防御。XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同,这就是给XSS漏洞防御带来的困难,不可能以单一特征来概括所有XSS攻击。
传统的XSS防御在进行攻击鉴别时多采用特征匹配方式,主要是针对JavaScript这个关键词进行检索,但是这种鉴别不够灵活,凡是提交的信息中各有JavaScript时,就被硬性的判定为XSS攻击。
2、基于代码修改的防御。Web页面开发者在编写程序时往往会出现一些失误或漏洞,XSS攻击正是利用了失误和漏洞,因此一种比较理想的方法就是通过优化Web应用开发来减少漏洞,避免被攻击:
①用户向服务器上提交的信息要对URL和附带的HTTP头、POST数据等进行查询,对不是规定格式、长度的内容进行过滤。
②实现Session标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
③确认接收的内容被妥善的规范化,仅包含最小的、安全的Tag,去掉任何对远程内容的引用,使用HTTP only的cookie。
3、客户端分层防御策略。客户端跨站脚本攻击的分层防御策略是基于独立分配线程和分层防御策略的安全模型。它建立在客户端,这是它与其他模型最大的区别。之所以客户端安全性如此重要,客户端在接受服务器信息,选择性的执行相关内容。这样就可以使防御XSS攻击变得容易,该模型主要由三大部分组成:
①对每一个网页分配独立线程且分析资源消耗的网页线程分析模块;
②包含分层防御策略四个规则的用户输入分析模块;
③保存互联网上有关XSS恶意网站信息的XSS信息数据库。
只适合在小应用中,并且处理范围非常有限,简单一点就是过滤/转义,在这我就不多说了,其实方法是非常多。我今天主要讲关于架构方面的知识:你google一下,了解下 WAF(Web应用防火墙),主要有两方面的:
软件角度的(推荐):基于nginx的Web应用防火墙/百度的加速了/创新工厂的安全宝......
硬件角度的(不推荐):NGAF
WAF可处理常见的Web安全有:XSS/SQL注入/跨站脚本/shell注入/会话劫持.....
在软件角度,git上面有不少这方面的开源项目,比如:https://github.com/loveshell/ngx_lua_waf
还有一些付费的云服务:安全宝/加速了......,可以了解下,确实很有意思,并不是简单的过滤转义。
个人认为:这本身属于网站架构方面的内容,是个全局的控制==输入/输出过滤,这要后台和前台保持一致就可以了。
您的回答过于简略,请丰富一下你的内容。
================
过滤
为了安全,CI过滤掉那些东西了。你要允许只能自己去修改CI源码。
后台过滤就可以了。例如script ,input 标签直接replace掉 ,onclick. onxxx 之类也replace掉。只允许图文的html标记和样式存在。
xss过滤主要是应对传值的时候,防止恶意攻击者往Web页面里插入恶意html代码。这种编辑器入库的根本不需要用xss过滤啊,可以用mysql_escape_string过滤一下入库,然后展示的时候用htmlspecialchars原型输出就可以了。
后台做一层过滤,前台文本编辑器可以自己做一层标签过滤,不允许一些符号的输入就行了
xss攻击前端能做的有限
因为好多都是url转码来通过参数找漏洞,所以后台也要做一层过滤(例如nodejs的sql库就只允许单行sql,防止通过xss做注入)java之类的有现成多xss过滤器
剩下的就做ip黑名单吧,防止多次攻击
我来说两句