XSS综合防御
Pin Young Lv9

XSS安全问题已经暴露好几年了,虽然XSS的安全防范越来越受到重视,但是却还没有一套完整的防御方案!

XSS介绍

XSS(Cross Site Scripting)中文名跨站脚本攻击。攻击原理是攻击者将恶意代码植入到页面中,导致浏览该页面的用户即会中招!

XSS危害

  • 盗取用户、管理员会话以获取全部权限
  • 控制用户操作(CSRF)
  • 发起DDOS攻击
  • 篡改页面
  • 等等

综合防御

优先级防御方法作用
一级过滤数据输入数据与显示数据双重过滤
二级HttpOnly限制JS操作Cookie
三级CSP规则限制外部资源加载与报告潜在隐患

一、过滤数据

大多数防御方法都会讲这块,过滤数据作为最有效的方法备受推崇。但不能单单只做这一点,而且这一点也得做全!

** 完整过滤规则 **

仅仅针对关键字进行黑名单过滤是非常不靠谱的,必须使用白名单和黑名单配合使用。并且过滤规则必须完整可靠,不能有任何遗漏!完整的规则请移步XSS过滤

** 全局过滤所有输入数据 **

过滤输入数据不仅仅是过滤GPC($_GET/$_POST/$_COOKIE),所有涉及到输入的点都有可能伪造,比如AGENT/IP/URL等,具体移步PHP风险函数里的输入函数!

过滤应该遵循一个原则:** 不信任任何外部数据 **。

另外全局这个概念得明确:很多时候漏洞都是开发者的疏忽导致的,所以在框架层以及更底层就应该全局过滤数据。比如在PHP里获取数据是使用$_GET,** 在框架层入口就应该重写或新建$_GET这类函数 **,保证其安全性!

** 全局过滤所有显示数据 **

大多数人都知道过滤输入数据,却遗漏了输出数据,输出数据作为给用户最终展现过滤更加应该防护好!

** 编辑器过滤 **

富文本编辑器使用场景越来越多了,因其特殊性导致其安全问题也频发。如果业务允许建议使用Markdown或者论坛常用的UBB来替换,如果不行使用编辑器前进行定制化精简功能并及时升级!

二、HttpOnly

XSS很大一个目的是盗取用户会话信息(SESSION),而要盗取SESSION需要读取客户端Cookie,因此使用HttpOnly能有效防止这类会话盗取攻击!HttpOnly具体设置方法请移步 HttpOnly

三、CSP规则

XSS想利用好需要执行JS,而大多数攻击者为了获取更多信息以及为了更方便的修改注入脚本往往会动态的加载远程JS文件,而CSP(内容安全策略)主要用来限制加载指定资源文件,通过CSP我们可以限制不是同域下的IMG/JS/CSS/FONT等资源文件的加载。具体设置规则请移步 CSP

总结

上面这些操作实施起来成本低并且简单有效,推荐加入!