这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
首先Web安全很常见,对于我们开发人员来说,在平时开发中需要特别注意
攻击
XSS
跨站脚本攻击(Cross Site Scripting) 恶意脚本注入
- 盲目信任用户提交内容
string -> dom转换inner htmlssr
特点:
- 很难从UI上感知
- 窃取用户信息(
cookie、token) - 绘制弹窗等
// 需要对字符串内容进行过滤
ctx.body = `<div>${content}</div>`
存储型XSS
- 恶意脚本被存在数据库中,用户在访问页面时读取数据时被攻击
- 全部用户可见,危害大
反射型XSS
- 通过
URL参数进行攻击。恶意代码在url中取出,拼接在HTML中返回给浏览器,用户就会执行恶意代码。
基于DOM XSS攻击
- 不需要服务器参与,恶意攻击发起执行在浏览器完成
基于浏览器区别XSS攻击
<noscript><p title="</noscript><img src=x onerror=alert(1)>">
<noscript><p title="</noscript>
<img src=x onerror=alert(1)>
"">"
CSRF
跨站伪造请求:
诱导用户跳转到新的页面,利用 服务器的验证漏洞 和 用户之前的登入状态,来模拟用户进行操作。
- 在用户不知情情况下
- 利用用户权限如
cookie - 构造指定
HTTP请求,进而窃取修改用户信息
如利用href,src
注入
- SQL注入
- CLi命令行注入
- OS comand
- SSRF
如以字符串形式拼接SQL语句导致被注入
DOS
构造特定请求消耗服务器资源,导致请求挤压,服务雪崩
- 利用正则表达式的贪婪模式
/a+/
传输层传输:中间人攻击
- 信息篡改
防御
XSS
永远不要相信用户特定的任何内容,及将其转化为DOM
场景:
- 动态生成
DOM - 上传
SVG检测,SVG``可插入script` - 自定义跳转(可传递js代码)过滤
- 自定义样式
// 能够制定用户
input[type=radio].income-get10k:checked {
background: url(https://xxx);;
}
主流框架自带,也可使用现成工具过滤
- google-closure-library
- Node:DOMPurity
同源政策 内容安全政策:定义安全源
响应头部:
Content-Security-Policy: script-src 'self' https://domain.comMeta标签
CSRF
- token
- token和具体用户绑定
- token有效期限
- iframe
X-Frame-Options: DENY/SAMEORIGIN
注入
- 最小权限原则
- 建立白名单过滤
- 限制url参数类型
DOS
- CR
- 代码扫描
- 禁止用户提供正则
其它
- 流量治理
- 快速扩容
HTTPS TSL- 数字签名
- HSTS:
HTTP升级HTTPS - SRI:静态资源篡改对比
hash - 依赖安全漏洞
总结
本次课程学习了Web相关的知识,老师也通过伪代码的形式讲解了出现安全的情况,整体上简洁明了。安全无小事,以后在开发中需要特别注意安全带来的问题