Web开发安全
攻击篇
Cross- Site Scripting(XSS)
xss主要利用了
- 盲目信任用户的提交内容
- string-> DOM
- document.write
- element.innerHTML = anyString;
- SSRCuser_data〕 //伪代码
XSS 的一些特点
- 通常难以从 U 上感知(暗地执行脚本)
- 窃取用户信息 (cookie/token)
- 绘制 UI (例如弹窗),诱骗用户点击/填写表单
存储型XSS
Stored XSS
- 恶意脚本被存在数据库中
- 访问页面 ->读数据=》被攻击
- 危害最大,对全部用户可见
反射型XSS
reflected XSS
- 不涉及数据库
- 从 URL上攻击
基于DOM的XSS攻击
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起、执行,全在浏览器完成
根据渲染机制进行攻击的XSS
Mutation XSS
- 利用了浏览器渲染 DOM 的特性(独特优化)
- 不同浏览器会有区别(按浏览器进行攻击)
跨域攻击
Cross-site request forgery(CSRF)
在用户不知情的前提下 -利用用户权限 (cookie)
- 构造指定 HTTP 请求,窃取或修改用户敏感信息
注入攻击
SQL linjection
1、请求
SQL参数(恶意注入)
2、server
参数->SQL
运行SQL code
3、
获取其他数据、修改数据、删除数据
lnjection 不止于 SQL
•CLI • OS command •Server- Side Request Forgery(SSRF),服务端伪造请求 • 严格而言,SSRF 不是injection,但是原理类似
DoS攻击
插播:正则表达式-贪婪模式
重复匹配时「?」 vs 「no了:满足“一个“即可 vs 尽量多
ReDos:基于正则表达式的 Dos
贪婪:n次不行?n-1次再试试?--回溯
响应时间变长,接口吞吐量下降
Distributed DoS(DDoS)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
攻击特点
- 直接访问IP
- 任意 API — 消耗大量带宽(耗尽)
传输层攻击
中间人攻击
特点: ①明文传输 ②信息篡改不可知 ③对方身份末验证
防御篇
XSS
- 永远不信任用户的提交内容
- 不要将用户提交内容直接转换成 DOM
插播:Same-origin Policy
- 协议
- 域名
- 端口
同源可行,跨域不可行
现成工具
前端 — 主流框架默认防御 XSS
- google-closure-library 服务端 (Node)
- DOMPurify
Content Security Policy(CSP)
CSP
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对 eval + inline script 说 NO
CSRF 的防御
if 伪造请求 异常来源
then 限制请求来源 一限制伪造请求
- Origin ]
- 同源请求中,GET + HEAD 不发送 ] 请求头部
- Referer ]
CSRE-token 除了 Origin + Referrer其他判断【请求来自于合法来源】的方式 先有页面,后有请求
if(请求来自合法页面〕
then C服务器接收过页面请求〕
then C服务器可以标识)
DDoS
-流量治理
- 负载均衡 ]
- API 网关 ] 过滤
- CDN ]
- 快速自动扩容 ] 抗量
- 非核心服务降级 ]
HTTPS 的一些特性
- 可靠性:加密
- 完整性:MAC 验证
- 不可抵赖性:数宇签名
HTTPS一一完整性
传输内容
加密信息 + 加密信息_hash
|
∨
接收方
if (hash(加密信息〕= 加密信息_hash)
{ok}
else
{not ok}
插播:数字签名
签名执行者
- privatekey (自己藏好)
- publickey (公开可见)