这里只记录一下自己觉得需要知道的点,不写的特别详细,因为每个点都是一个大的方向,有很多技巧和内容,这里只是写一下大纲。书里还有很多其他有用的内容,值得一读。
浏览器端
1.XSS
攻击:
-
通过URL参数,表单输入等方式,进行脚本的注入,执行获取cookie,修改页面行为等操作(脚本能注入了,能做的事情就非常多了)。
-
有一些页面上的内容在提交后是保存在服务器上,并且会提供给其他用户查看的,所以这些内容(比如博客)里面如果注入了脚本,就可能形成蠕虫,广泛传播。
-
构造XSS可能会用到字符编码,引号闭合,利用location.hash、window.name等技巧,技巧性很强,非常灵活。
防御:
-
HttpOnly,这个标识是用来防止在浏览器中获取到cookie的,严格来说不是针对XSS的
-
输入检查,对有用户输入的地方进行XSS过滤,对富文本输入要用白名单过滤标签,事件,样式等
-
输出编码,和输入检查相对应,是当内容渲染到页面上时对内容进行编码,使攻击者构造的XSS失效
-
页面渲染要设置能够使用的标签的白名单
-
Content-Security-Policy可以做不少事情
2.CSRF
攻击:
- 目标是A站点上的一个请求,攻击者在自己的站点B上面构造A的请求,引诱用户去触发,浏览器会带上A的cookie,这样攻击者根本不需要获取到A的cookie,非常省力。
防御:
-
验证码,请求里面如果需要带上用户输入的验证码,就会增加攻击难度,不过验证码体验不好,有些验证码也可以通过图像识别来处理了
-
检查referer,但是有些请求就是不带referer的,有些a标签还要写noreferrer
-
csrf token,相对比较有效的方法
3.点击劫持
攻击:
-
个人理解是:目标是A站点,攻击者在自己的站点B上面,嵌套一个src是A的iframe,然后通过元素的位置重叠来引导用户点击,可以是点击A,也可以是点击B,具体看攻击目的(可能理解的不够准确)
-
拖曳劫持,和点击劫持很像,是通过drag drop操作,引诱用户拖动攻击者想要的数据到攻击者的页面上,所以要注意页面上的小游戏什么的
-
触屏劫持,点击劫持的延伸,针对手机浏览器
防御:
-
frame busting,检查自己的页面是否被嵌套在了别的页面里
-
X-Frame-Options,Http头,指示允许一个页面 可否在 , , 或者 中展现,可以说是针对点击劫持而生
4.其他
一些较新的特性可能需要注意一下,比如postMessage,在发送和接收消息的时候都要校验一下来源
服务器端
对服务器端不是很熟悉,所以写的比较简略
1.注入
攻击:
- 和XSS有点像,比较灵活,根据不同的数据库,不同的版本有不同的技巧。
防御:
-
预编译语句
-
输入过滤
-
使用存储过程
-
检查数据类型
备注:
- XML文件,Http头等也是可能被注入攻击的,还有一些可以执行语句的函数,可能受到代码注入的攻击,比如js的eval函数,c的system函数等
2.文件上传
攻击:
-
用户上传的文件没有妥善处理,直接在服务端执行造成的安全问题
-
通过修改、截断文件真实的后缀名,伪造文件头信息,来绕过检查
-
利用浏览器的文件类型嗅探功能,上传一个内容是脚本,但后缀名是图片的文件,当该文件在页面上加载时,部分浏览器会根据文件内容来判断需要什么样的操作而无视文件的后缀名
防御:
-
文件上传的目录设置只读权限,或者使用CDN
-
改写上传的文件名,有些攻击是利用服务器应用的一些漏洞,这些漏洞很多是依赖文件名和文件路径的
-
文件内容扫描,除了防止攻击,还可以做一些业务相关的防范,比如政治敏感等问题
其他方面
1.认证与授权
-
垂直权限管理:每个账号有自己的角色(一个账号可能有多个角色),不同的角色有不同的权限,这类权限可以在中间层统一校验
-
水平权限管理:相同角色(相同权限)的A账号和B账号,B访问或操作了A的数据,这类权限需要单独校验
-
OAuth:第三方授权
2.web框架
- 可以在中间层做XSS过滤,html渲染编码,CSRF token的处理,302跳转地址的白名单管理,配置各种Http头
3.DDOS
攻击:
- 大量访问资源,如网络连接,读写磁盘或数据库的接口,含正则表达式的接口等,造成服务器无法向其他用户提供服务
防御:
-
身份识别,并限制每个身份的资源访问量
-
优化代码,缩短接口的响应时间;优化架构,做好负载均衡,如某些资源可以使用CDN;通过web服务器应用的一些配置,使攻击失效,如缩短超时时间