暴力破解
防范方式:
图片验证码/滑动验证码、短信验证码
登录次数过多时,锁定账户或IP
关键接口设置密码验证机制,限制请求频率
命令注入
防范方式:
使用白名单安全过滤,(适用于固定不变的命令或数据;校验包含哪些字符)
使用安全的函数对传递给命令的参数进行转义
将应用程序的权限降到最低
给WEB服务器系统及使用的中间件及时打上安全补丁
文件上传漏洞
任意文件可上传,便可利用上传可执行文件或脚本到服务器上。攻击者上传恶意代码程序至服务器,进而获取服务权限,或者上传大文件浪费磁盘空间
防范方式:
客户端校验文件上传类型
(任何客户端校验都是不安全的,服务端的验证才能真正防御攻击)
黑名单策略、白名单策略、
限制文件大小
限制文件后缀名
针对外部上传的内容,可进行病毒扫描
服务端限制压缩文件解压层数
未授权访问漏洞
无需用户名、密码、登录态,可访问受保护的接口
防范方式:
遵循默认拒绝原则、最小权限原则
接口需要验证用户是否登录、以及是否有权限访问
垂直越权漏洞
低权限用户可越权操作高权限用户内的功能
防范方式:
按照基于角色的权限控制模型进行权限控制
服务端需要将权限校验到接口层,校验顺序为:
会话-->用户-->角色-->菜单-->按钮-->接口
水平越权漏洞
通过篡改报文中的业务参数实现增删改查其他用户内的数据
防范方式:
敏感信息
输入输出是否包含敏感信息:卡号、姓名、身份证号等
流程漏洞
非原子操作的接口,最后一个接口应该校验前面几个步骤的校验状态,校验通过后才实现接口功能
预防CSRF
CSRF(Cross-site request forgery):跨站请求伪造。
用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie。
从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:
(1)登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)
(2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。
我们在讲CSRF时,一定要把上面的两点说清楚。
温馨提示一下,cookie保证了用户可以处于登录状态,但网站B其实拿不到 cookie。
预防CSRF攻击
跨站请求攻击,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一定的操作。因为浏览器认证过,所以网站会认为是真正的用户在操作。
例子
假如一家银行转账操作的URL地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一个另外的网站可以放置如下代码
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
如果用户之前刚访问过银行网站,登陆信息尚未过期,再次访问恶意网站点击了这个图片,那么就会损失1000元。事实上,这些地址还可以放在论坛、博客等地方,这种恶意访问的形式更加隐蔽,如果服务端没有相应措施,很容易受到威胁。
防御措施
检查referer字段
HTTP头中有一个Referer字段,这个字段是用来标明请求来源于哪一个网址。通常来说,Referer字段应和请求的地址是在同一个域名下的。服务器可以通过判断Referer字段来判断请求的来源。 这种方法简单易行,但也有其局限性。http协议无法保证来访的浏览器的具体实现,可以通过篡改Referer字段的方式来进行攻击
Token 验证
(1)服务器发送给客户端一个token;
(2)客户端提交的表单中带着这个token。
(3)如果这个 token 不合法,那么服务器拒绝这个请求。
(4)设置验证码
预防XSS
XSS(Cross Site Scripting):跨域脚本攻击。
XSS攻击的核心原理是:不需要你做任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是js、hmtl代码块等)。
最后导致的结果可能是:
盗用Cookie
破坏页面的正常结构,插入广告等恶意内容
D-doss攻击
1、百度百科的解释: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
2、它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。
攻击方式
1、反射型
发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
2、存储型
存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求时目标页面时不用再提交XSS代码。