Web 安全
Web 相关编码
URL 编码
- encodeURI
- encodeURIComponent
HTML 编码
戳 👈
JS 编码
XSS 跨站脚本攻击
Cross-Site Scripting
- 反射型(非持久型)诱导点击带有恶意脚本代码参数的链接
- 存储型(持久型)发一篇带有恶意脚本代码的公众文章给用户浏览
- DOM-Based 型
现代框架默认会屏蔽 XSS 攻击,除非手动开启
- Vue
v-html
- React
dangerouslySetInnerHTML
escape 转义
1 | // require('escape-html') |
白名单
1 | require('xss') |
CSP
cookie HttpOnly
CSRF 跨站请求伪造
Cross-Site Request Forgery
请看下面的故事:
- 小明登录了 Gmail 邮箱,收到一封广告邮件 “转让比特币,只要 998”
- 小明抱着好奇的心态点开看了看,发现是个空白页面,就关闭了
但此时,攻击已经完成了,黑客会让小明的邮件都转发到 hacker@hackermail.com
因为小明已经登录了 Gmail,有了 Gmail 的 cookie。所以再去请求 Gmail API 就会带着 cookie,就有可能成功
邮件经常用来接收验证码,这是很危险的事情
当然了,后来 Gmail 修复了这个漏洞。但新的故事仍在不断发生中..
1 | <form method="POST" action="https://mail.google.com/mail/h/ewt1jmuj4ddv/?v=prf" enctype="multipart/form-data"> |
- 对 Cookie 设置
SameSite
属性Set-Cookie: key=val; SameSite=Strict;
- 验证 Referer
document.referrer
token
、验证码、Authorization 令牌
蠕虫
XSS + CSRF
ClickJacking 点击劫持
X-FRAME-OPTIONS
DENY
表示页面不允许通过 iframe 的方式展示SAMEORIGIN
表示页面可以在相同域名下通过 iframe 的方式展示ALLOW-FROM
表示页面可以在指定来源的 iframe 中展示
JS 防御
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<head>
<style id="click-jack">
html {
display: none ;
}
</style>
</head>
<body>
<script>
if (top.location.hostname === self.location.hostname) {
const style = document.getElementById('click-jack')
document.body.removeChild(style)
} else {
top.location.href = self.location.href
}
</script>
</body>
DDOS 攻击
Distributed Denial-of-service 分布式拒绝服务 👈
SQL 注入
1 | select * from users where username='Bobo' and password='' or true --' |
DNS 劫持、HTTP 劫持
HTTPS
HTTPS 中间人攻击
CA证书包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等
中间人篡改证书?🤔️
数字签名: 用 CA 自带的 HASH 算法对证书的内容进行 HASH 得到一个摘要,再用 CA 的私钥加密,最终组成数字签名
当别人把证书发过来的时候,再用同样的 Hash 算法,再次生成消息摘要
,然后用 CA 的公钥对数字签名解密,得到 CA 创建的消息摘要,两者一比,就知道中间有没有被人篡改了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 寻梦环游记!