这是我参与「第五届青训营 」笔记创作活动的第3天
一、本堂课重点内容:
- 了解常见的攻击方式
- 相对应的防御手段
二、详细知识点介绍
1. Cross Site Scripting (XSS)
XSS攻击,能将恶意的代码注入到网站中
常见的类型
Stored XSS--- 危害最大- 恶意的脚本被注入到数据库中
- 访问页面 -> 读取数据 === 被攻击
Reflected XSS- 恶意脚本在服务端进行注入
- 从URL进行攻击
- 引诱用户点击一个链接到目标网站的恶意链接来实施攻击
DOM XSS- 不需要服务器的参与
- 攻击和执行,全在浏览器完成
防御方式
需要遵循的原则:
- 永远不信任用户的提交内容
- 不要将用户提交内容直接转成DOM
现成的工具
-
前端
- 主流框架默认防御
XSS - google-closure-library
- 主流框架默认防御
-
服务端
Node- DOMPurify
Content Security Policy(CSP)
- 设置哪些源是安全的
- 只执行安全源的脚本
设置方法
- 服务端
Content-Sercurity-Policy: script-src 'self' 同源
Content-Sercurity-Policy: script-src 'self' ...(其他源)
- 浏览器
<meta http-equiv="Content-Sercurity-Policy" content="script-src self">
2. Cross-site request forgery(CSRF)
在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息
防御方式
Origin + Referrer
token
SameSite Cookie
3. Injection
这种类型的攻击允许攻击者将代码注入程序,以执行可以读取或修改数据库或更改网站上数据的远程命令
类型
-
SQL Injection利用SQL语句注入可以读取或修改数据库的命令
-
OS command通过HTTP请求向Web应用程序注入操作系统命令,攻击者可能会上传恶意程序或获取密码
-
...
防御方法
prepared statement
在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数执行,因此就算参数中含有具破坏性的指令,也不会被数据库所执行。
其他
- 最小权限原则
- 执行的命令不要使用root权限
- 建立允许名单 + 过滤
- 对于一些命令只允许一部分人执行
- 对URL 类型参数进行协议、域名、ip 等限制
- 避免攻击者访问内网
4. Denial of Service(Dos)
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应
类型
ReDos: 基于正则表达式的Dos
防御方法
针对ReDos
5. Distributed Dos(DDos)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新的请求
防御方法
三、HTTPS
特性
- 可靠性: 加密
- 完整性:MAC 验证
- 不可抵赖性:数字签名
HTTP Strict-Transport-Security(HSTS)
四、总结
- 安全无小事,要了解常见的安全问题和解决方法,安全永远第一位
- 了解最新的Web安全相关的知识,终身学习