参考网址:
【干货分享】Web安全漏洞深入分析及其安全编码
常见 Web 安全攻防总结
Web 安全入门之常见攻击
来一张镇博图:
安全无小事。
1.XSS
介绍:全英Cross Site Script,跨站脚本攻击。
原理:攻击者在Web页面中插入恶意脚本,当用户浏览页面时,嵌入其中的脚本代码会被执行,从而可以达到攻击目的(盗取用户信息或其他侵犯用户安全隐私)
示意图:
分类:
(1)存储型XSS(Stored XSS,Persist XSS,持久型XSS)
# 一般存在于form表单提交等交互功能,攻击者将内容经正常功能提交进入数据库持久保存。
# 跨站代码存储于服务器中(如数据库中)
# 攻击成功条件:
A.POST请求提交表单后端没做转义直接入库;
B.后端从数据库中取出数据没做转义直接输出给前端;
C.前端拿到后端数据没做转义直接渲染成DOM。
# 特点:
A.持久性,植入到数据库中;
B.危害面广,甚至可以让用户机器变成DDos攻击的肉鸡(傀儡机)
C.盗取用户敏感私密信息
# 防止:
A.后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理
B.后端在输出给前端数据统一进行转义处理
C.前端在渲染页面DOM的时候应该选择不相信任何后端数据,任何字段都需要做转义处理
(2)反射型XSS(Reflected XSS,Non-persist XSS,非持久型XSS)
# 一般通过给用户发送带有恶意脚本代码参数的URL,当URL地址被打开时,提交一个伪造表单,其中的恶意代码会和正常返回数据一起作为响应发送到用户的浏览器,被HTML解析并执行。
# 跨站代码一般存储于链接中
# 特点:
A.即时性。不经过服务器存储,直接通过HTTP的GET和POST请求就能完成一次攻击,拿到用户隐私数据
B.攻击者需要诱骗点击
C.反馈率低,所以较难发现和响应修复
D.盗取用户敏感私密信息
# 防止:
A.Web页面渲染的所有内容或渲染的数据都必须来自于服务器
B.尽量不要从URL,document.referrer,document.forms这种DOM API中获取数据直接渲染
C.尽量不要使用eval(),new Function(),document.write()等可执行字符串的方法
D.对涉及DOM渲染的方法传入的字符串参数做escape转义
(3)DOM型XSS(DOM based XSS)
# 客户端脚本自身解析不正确导致的安全问题
# 防止:
A.指定
B.XML标签闭合
C.严格管控cookie的读写权限
D.对参数进行过滤
2.CSRF
介绍:Cross-Site Request Forgery,跨站请求伪造攻击
原理:网站A对用户建立信任关系后,用户在信任有效期内访问攻击者建立的网站B,网站B利用这种信任关系,跨站点向网站A发起一些伪造的用户操作,以达到攻击目的。也可以简单理解为:攻击者盗用你的登录信息,以你的身份模拟发送各种请求。
示意图:
攻击成功条件:
A.用户已经登陆了站点A,并在本地记录了cookie
B.在用户没有登出站点A的情况下(也就是cookie生效的情况下),访问了攻击者提供的危险站点B(B站点要求访问站点A)
C.站点A没有做任何CSRF防御
防御:
A.防御效果从服务端着手比较好。正确使用GET,POST请求和cookie
B.在非GET请求中增加token(做验证?)
3.SQL注入
介绍:SQL Injection
原理:程序没有有效的转义过滤用户的输入,使攻击者成功地向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的已部分执行,导致原始的查询逻辑被改变,额外执行了攻击者构造的恶意代码。
攻击成功条件:
A.网页应用使用SQL来控制数据库
B.用户传入的数据直接被写入数据库
预防措施:
A.严格限制Web应用的数据库操作权限
B.所有的查询语句建议使用数据库提供的参数化查询接口,而不是直接将输入变量嵌入SQL语句
C.验证用户的输入
D.对用户提供的所有输入都进行编码
4.命令行注入
介绍:攻击者能够通过HTTP请求直接侵入主机,执行攻击者预设的shell命令。
防止:
A.后端对前端提交内容需要完全选择不相信,并且对其进行规则限制(比如正则表达式)
B.在调用系统命令前对所有传入参数进行命令行参数转义过滤
C.不要直接拼接命令语句,借助一些工具做拼接,转义处理
5.DDoS攻击
介绍:Distributed Denial of Service,分布式拒绝服务
原理:攻击者通过大量恶意流量占用带宽和计算资源,以达到瘫痪对方网络的目的。
示意图:
一般DDoS攻击的目的就两个:
A.敲诈勒索,比你花钱买平安
B.打击竞争对手
技术:DDoS攻击可以针对网络通讯协议的各层
分类:
(1)网络层DDoS
# 包括SYN Flood、ACK Flood、UDP Flood、ICMP Flood
# 防御:本质上其实是无法防御的,只能不断优化服务本身部署的网络架构,以及提升网络带宽
(2)应用层DDoS
# 包括CC、DNS Flood、HTTP慢速连接攻击
# 防御:核心就是区分人与机器(爬虫),因为大量的请求不可能是人为的。如果能有效区分人与爬虫行为,就能很好防御应用层DDoS攻击。
写在后面的话:
本文受害者与用户并没有做区分;这里的攻击手段的防御机制叫做预防,并没有被攻击后采用的处理措施。