安全
我们先解释清楚一些概念:
- CSP:协议名称,Content Security Policy,内容安全策略
- CORS:协议名称,Cross-Origin Resource Sharing,跨域资源共享
- CSRF:攻击方法,Cross-Site Request Forgery,跨站请求伪造
Good to know
你可能觉得这些概念和平时开发没什么关系,其实不然。只有具备好的安全意识,才能在开发中避免踩坑,或者不慎引入安全问题。
CSP
CSP 是 Content Security Policy 的缩写,是一种安全策略,用于防止跨站脚本攻击(XSS)和数据注入攻击。
CSP 通过设置 HTTP 头来告诉浏览器哪些内容是安全的,哪些是不安全的。
CORS
CORS 是 Cross-Origin Resource Sharing 的缩写,是一种安全策略,用于防止跨站请求攻击(CSRF)。
具体实现则是服务端配置 Access-Control-Allow-Origin 等响应头,明确指定允许访问的源。
CSRF(跨站请求伪造)
假设你正在登录银行网站 A,银行将你的登录凭证存储在 cookie 中。这时你访问了恶意网站 B,网站 B 向银行网站 A 发起一个转账请求。由于浏览器会自动携带 cookie,所以银行网站 A 会认为这是一个合法请求。
Good to know
解决 CSRF 的本质是:验证请求的来源。
如何防范 CSRF
可以采用以下任意一种或几种方法结合使用:
-
验证 HTTP Referer 字段:检查请求是否来自合法的源,但 Referer 可以被伪造,不能完全依赖
-
添加 Token 验证
- 服务器向客户端发送一个随机 Token
- 客户端发送请求时必须携带这个 Token
- 服务器验证 Token 是否匹配
-
SameSite Cookie 属性
- Strict: 完全禁止第三方网站发送 Cookie
- Lax: 允许部分第三方请求发送 Cookie
- None: 允许所有跨站请求发送 Cookie
-
使用 CORS 策略
- 服务器通过 Access-Control-Allow-Origin 等响应 头
- 明确指定允许访问的源
- 对于非简单请求,先发送预检请求(OPTIONS)验证