前端安全
Indomite
# 前端安全
# XSS
跨站基本攻击,发生在目标用户浏览器层面上。攻击者企图将可执行的代码注入到网页中
防御
- escape 转义字符,对输入的引号,尖括号,斜杠进行转义
- CSP内容安全策略,建立白名单,明确告诉浏览器哪些外部资源可以加载和执行
- 设置HTTP Header的
Content-security-Policy
- 或者设置meta标签的
meta-http-equiv="Content-security-Policy"
- 设置HTTP Header的
- 私密cookie增加httpOnly(执行意外的脚本意味着网页所有内容都可被获取,甚至转发,cookie如果保存用户信息数据的东西尽量不让前端随意访问)
xss防御核心:对任何不可信任的数据不要渲染,即使渲染也要先转义
# CSRF
跨站请求伪造
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任网站A,并在本地生成Cookie
2.受害者访问危险网站B, 网站B中发送请求给网站A,请求会自动带上Cookie
防御
- GET请求不对数据进行修改
- 不让第三方访问cookie(SameSite: strict)
- 组织第三方访问(通过Referer头部)
- 请求附带信息,Token
# 点击劫持
通过iframe内嵌攻击网站的网页,诱导用户点击触发攻击(点击的一瞬间可以执行xss或者csrf,但这里不是点击劫持的范畴)
防御
- X-FRAME-OPTIONS
- DENY 阻止
- SAME-ORIGIN 同源
- ALLOW-FROM 数组或者单个值
- js实现 window.top !== window.self
# 中间人攻击
同时和服务端和客户端建立连接,让对方认为这是安全的
- 本地请求被劫持(如DNS劫持等),所有请求均发送到中间人的服务器
- 中间人服务器返回中间人自己的证书
- 客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输
- 中间人因为拥有客户端的随机数,可以通过对称加密算法进行内容解密
- 中间人以客户端的请求内容再向正规网站发起请求
- 因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据
- 中间人凭借与正规网站建立的对称加密算法对内容进行解密
- 中间人通过与客户端建立的对称加密算法对正规内容返回的数据进行加密传输
- 客户端通过与中间人建立的对称加密算法对返回结果数据进行解密
# 加密
- 对称加密:通信双方使用的密钥是完全相同的,密钥既可以把明文加密成密文,也可以把密文解密成明文。(DES, 3DES, AES)
- 非对称加密:使用的密钥对是一个公钥一个私钥。公钥可以把明文加密成密文,而私钥则是把密文解密成明文。私钥是不能被其他人知道的,而公钥即使第三方拿到了也没有问题。因为最终完成解密的私钥只在你手上,别人只能加密而无法查看密文的内容。(RSA)