这是我参与「第四届青训营」笔记创作活动的第4天。
作为刚开始学习前端的萌新们,大多数都不会在自己的学习规划中设计到web安全的学习,是web安全不够重要吗?错,web安全十分的重要,但最初的开发涉及不到安全方面的问题,也不会有人攻击我们的个人网站(当然你的同学攻击可就不算了昂,haha)。这一章就让我们走进web安全,来一起see see到底什么是web安全以及我们怎样学习web安全。
以下内容主要介绍了关于web开发的安全相关的问题。(仅提供一些思想,但不会具体展开说明。)
一、假如你是一个hacker--攻击者
首先,让我们了解一个最常见的攻击方式————xss。XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.
那么在知道了什么是xss的前提下,让我们来看一下大名鼎鼎的xss有什么特点呢?
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
当然xss跨站脚本攻击,并不单单就指一种攻击方式,具体还有很多的分类。
- sorted xss(存储型xss攻击)
- 恶意脚本被存在数据库中
- 访问页面 -> 读数据===被攻击
- 危害最大,对全部用户可见
- reflected xss(反射型xss)
- 不涉及数据库
- 从URL上攻击
- DOM-based xss(基于DOM的xss攻击)
- 不需要服务器的参与
- 恶意攻击的发起 + 执行,全在游览器完成
- Mutation-based xss(基于Mutation的xss攻击)
- 利用了游览器渲染DOM的特性(独特优化)
- 不同游览器,会有区别(按游览器进行攻击)
了解完xss,再一起看看另一种攻击方式CSRF(Cross-site request forgery)。其特点是:
- 在用户不知情的前提下
- 构造用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
下面是CSRF攻击的一种情况:
第三种攻击方式是Injection(注入攻击):
- CLI
- OS command
- Server-Side Request Forgery(SSRF),服务端伪造请求(严格来说,SSRF不是injection,但原理相似)
接下来为SQL Injection攻击流程
第四种攻击方式是DoS攻击, 是通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
- ReDoS,基于正则表达式的DoS
- Logical DoS
- Distributed DoS
二、假如你是一个开发者————防御
通过上一部分,我们大致了解了攻击web最常见的几种方式,那么面对攻击,我们只能束手待毙吗?什么都做不了吗?不,我们可以提前根据攻击方式进行相应的进行防御。
首先是第一种xss攻击。前端方向,目前的主流框架都默认防御xss攻击,或者也可以google-closure-library来进行防御。服务端方面(Node),可以通过DOMPurify来进行防御。当然有些时候,用户需求需要我们动态生成DOM,我们只能要小心注意下面几个点:
- string ——> DOM
- 上传svg
- Blob动态生成script
- 自定义跳转链接
- 自定义样式
接下来是第二种CSRF的防御:
SameSite
- Cookie发送
- domain vs 页面域名
- “我跟你说个事儿,出这屋我可就不认了”
CORS
- 资源读写(HTTP请求)
- 资源域名 vs 页面域名
- 白名单
然后是第三种Injection的防御:
最后一种第四种DoS的防御,需要分情况:
Regex DoS
- Code Review
- 代码扫描 + 正则性能测试
- 拒绝用户提供的正则
Logical DoS
DDoS
本章内容介绍引导就到此结束了,想要具体掌握,还需诸位各自查阅资料,该文章只提供方向。 (萌新小白,根据课程大致写的,不喜勿喷,谢谢。)