-
这是我参与「第四届青训营 」笔记创作活动的第6天
以下为日常上课笔记,有关于Web开发安全的一些基础内容
-
安全问题"很常见”,会危害
-
用户
-
公司
-
程序员(祭天)
-
-
两个角度看web安全
-
假如你是一个hacker——攻击
-
Cross-Site Scripting(XSS)
-
举例
-
XSS主要利用了
-
特点
-
通常难以从UI上感知(暗地执行脚本)
-
窃取用户信息(cookie/token)
-
绘制UI(例如弹窗),诱骗用户点击/填写表单
-
-
demo
-
可以直接提交恶意脚本
-
Stored XSS
-
特点
-
恶意脚本被存在数据库中
-
访问页面→读数据被攻击
-
危害最大,对全部用户可见
-
-
举例
-
-
Reflected XSS
-
特点
-
不涉及数据库
-
从URL上攻击
-
-
demo
-
-
DOM-based XSS
-
特点
-
不需要服务器的参与
-
恶意攻击的发起+执行,全在浏览器完成
-
-
demo
-
和Reflected XSS对比
-
完成注入脚本的地方不同
-
-
-
Mutation-based XSS
-
特点
-
利用了浏览器渲染DOM的特性(独特优化)
-
不同浏览器,会有区别(按浏览器进行攻击)
-
-
demo
-
-
-
Cross-site request forgery(CSRF)
-
特点
-
在用户不知情的前提下
-
利用用户权限(cookie)
-
构造指定HTTP请求,窃取或修改用户敏感信息
-
-
demo
-
GET
-
beyond GET
-
-
Injection
-
SQL Injection
-
原理
-
demo
-
-
CLI
-
demo
-
执行
-
读取+修改
-
-
-
OS command
-
server-Side Request Forgery(SSRF),服务端伪造请求
严格而言,SSRF 不是injection,但是原理类似-
demo
-
-
-
Denial of Service(DoS)
-
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
-
ReDoS:基于正则表达式的Dos
-
Logical DoS
-
特点
-
耗时的同步操作
-
数据库写入
-
SQL join
-
文件备份
-
循环执行逻辑
-
-
demo
-
-
-
Distributed DoS(DDos)
-
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
-
不搞复杂的,量大就完事儿了
-
特点
-
直接访问IP
-
任意API
-
消耗大量带宽(耗尽)
-
-
demo
-
-
传输层
-
中间人攻击
-
发生原因
-
明文传输
-
信息篡改不可知
-
对方身份未验证
-
-
原理
-
-
-
-
假如你是一个开发者——防御
-
XSS
-
策略
-
永远不信任用户的提交内容
-
不要将用户提交内容直接转换成DOM
-
-
可用工具
-
-
警惕
-
上传svg
-
Blob 动态生成script
-
自定义跳转链接
-
自定义样式
-
-
-
Same-origin Policy
-
Content Security Policy(CSP)
-
服务器的响应头部
-
浏览器meta
-
-
CSRF的防御
-
token
-
iframe攻击
-
anti-pattern
-
GET!== GET+POST
-
-
防御CSRF的正确姿势
-
中间件
-
-
-
SameSite Cookie
-
避免用户信息被携带
-
限制的是:Cookie domain、页面域名
-
依赖Cookie的第三方服务怎么办?
-
SameSite vs CORS
-
demo
-
-
Injection
-
防御策略
-
Injection beyond SQL
-
-
DoS
-
Regex DoS
-
Logical Dos
-
-
DDoS
-
防御
-
-
传输层
-
防御中间人
-
HTTPS的一些特性
-
TLS1.2握手
-
HTTPS——完整性
-
HTTPS——不可抵赖:数字签名
-
数字签名
-
原理
-
浏览器内含大量CA证书
-
demo
-
-
暴力破解,当签名算法不够健壮时
-
-
HTTP Strict-Transport-Security (HSTS)
-
将HTTP主动升级到HTTPS
-
-
-
Subresource Integrity (SRI)
-
防止
-
demo
- 标签hash(原始内容hash) vs 实际内容hash
- 标签hash(原始内容hash) vs 实际内容hash
-
-
-
-
补充
-
Feature Policy/Permission Policy
-
安全无小事
-
使用的依赖(npm package,甚至是NodeJS)可能成为最薄弱的一环
-
保持学习心态
-
npm install除了带来了黑洞,还可以带来漏洞
-