概念
我们把安全问题按照所发生的区域来进行分类的话分为前端安全问题和后端安全问题。
- 所有发生在后端服务器、应用、服务当中的安全问题就是“后端安全问题”;例如SQL注入漏洞
- 所有发生在浏览器、单页面应用、Web页面当中的安全问题则算是“前端安全问题”;例如跨站脚本攻击。
XSS攻击(跨站脚本攻击)
攻击者通过注入非法的html标签或者JavaScript代码,从而当用户浏览该网页时,控制用户浏览器。
xss主要分成三类:
| 类型 | 存储区 | 插入点 |
|---|---|---|
| 存储型xss | 后端数据库 | HTML |
| 反射型xss | URL | HTML |
| DOM型xss | 后端数据库/前端存储/URL | 前端JS |
存储型xss
存储型XSS又被称为持久性XSS,它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。
允许用户存储数据的web程序都可能存在存储型XSS漏洞
当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型的例子就是留言板。
反射性xss
反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。
发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。
dom xss
DOM即文本对象模型,DOM通常代表在html、xhtml和xml中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。
它不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,可以认为完全是客户端的事情。
如何防御XSS
- 输入输出检查:一般是对输入格式的检查,例如:邮箱,电话号码,用户名,密码等,按照规定的格式输入
- 富文本类使用标签白名单
- 增加验证码,防止脚本冒充用户提交危险操作
- 通过CSP,输入长度匹配,接口安全措施等方法
- 禁止加载外域代码,防止复杂的攻击逻辑
- 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域
- 禁止内联脚本执行
- 禁止未授权的脚本执行
- 合理使用上报可以及时发现XSS,利于尽快修复问题
- 主动监测发现
- httpOnly: 在cookie中设置HttpOnly属性后,js脚本将无法读取到cookie
CSRF攻击(跨站请求伪造)
冒充用户发起请求(在用户不知情的请况下),完成一些违背用户意愿的事情,达到攻击的目的。
CSRF攻击要素
- 攻击一般发起在第三方网站,被攻击的网站无法防止攻击发生
- 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据
- 整个过程攻击者并不能获取受害者登录凭证,只是冒用
- 跨站请求可以是图片URL、超链接、CORS、Form提交等
CSRF攻击过程
- 用户浏览并登录信任网站A
- 验证通过,在用户处产生A的Cookie
- 用户在没有登出A网站的请况下,访问危险网站B
- B要求访问第三方站点A,发送一个请求(request)
- 根据B的请求,浏览器带着在第二步中产生的Cookie访问A;
- 由于浏览器会自动带上用户的Cookie,所以A会根据用户的权限处理请求,这样B就达到了模拟用户操作的目的。
CSRF的防御
- 验证码:强制用户必须与应用进行交互,才能完成最终请求。此种方式能很好的遏制 csrf,但是用户体验比较差。
- 尽量使用post,限制get使用
- 同源检测:如何判断请求是否来自外域?HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:Origin Header、Referer Header,这两个Header在浏览器发起请求时,大多数情况会自动带上,并且不能由前端自定义内容。服务器可以通过解析这两个Header中的域名,确定请求的来源域。
- Samesite Cookie:Set-Cookie响应头新增Samesite属性,用来标明这个Cookie是个“同站 Cookie”,同站Cookie只能作为第一方Cookie,不能作为第三方Cookie,Samesite 有两个属性值,分别是Strict和Lax:
- Samesite=Strict:严格模式,表明这个 Cookie 在任何情况下都不可能作为第三方 Cookie,绝无例外
- Samesite=Lax:宽松模式
- token:整体思路如下
- 后端随机产生一个token,把这个token保存到session状态中;同时后端把这个token交给前端页面;
- 前端提交请求时,把token加入到请求数据或者头信息中,一起传给后端
- 后端验证前端传来的token和session是否一致,一致则合法,否则就是非法请求
- 双重Cookie验证:用户访问网站页面时,向请求域名注入一个Cookie,前端向后端发起请求时,取出Cookie,添加到URL的参数中,后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。
Clickjacking(点击劫持)
利用透明的按钮或连接做成陷阱,覆盖在Web界面之上。然后诱使用户在不知情的情况下,点击那个连接访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。
方式
- 攻击者使用一个透明iframe,覆盖在一个页面上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面
- 攻击者使用一张图片覆盖在网页,遮挡网页原有的位置含义。
ddos攻击
ddos攻击在短时间内发起大量的请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质性下线。
DDOS 不是一种攻击,而是一大类攻击的总称。其中,比较常见的一种攻击是 cc 攻击。cc攻击就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机。
防范ddos
- 备份网站
- HTTP请求的拦截(如果恶意请求有特征,直接拦截)
- 带宽扩容
- CDN www.ruanyifeng.com/blog/2018/0…