这是我参与「第五届青训营 」伴学笔记创作活动的第 十 天
1. Web 开发的安全之旅
Web安全问题一窥
安全问题很常见,会危害
- 用户
- 公司
- 程序员
两个角度看Web安全
- 假如你是一个hacker——攻击
- 假如你是一个开发者——防御
课程内容要点
XSS
永远不要相信用户提交的输入!!!!
更不要把用户提交的输入直接转化为DOM
现实例子——抖音评论区无法输入
<>
XSS的防御工具可采用一些主流的框架(如google-closure-library),或者在前台后端(NODE)层面装载DOMPurify
如果必须动态生成DOM,需要强调的是:
- string->DOM: new DOMParser(),一定要对DOM进行转意
- 上传svg:对svg文件进行扫描。svg里面可以含脚本
- 自定义跳转:慎用,因为可以插入js代码
- 自定义样式:这样暴露了月收入
CSP
同源策略:协议+域名+端口号三者完全一样
以上三者都不同源
不同源-》跨域,而CSP可以自定义设置哪些域名是安全的,来自安全源的域名执行,不安全则报错。也可以拒绝js
CSRF的防御
- 方式一
异常请求不在域名白名单内,将会被拒绝。
- 方式二
利用token判定用户是否来自原始页面
- 终极
尽量不对单独的案例设置单独的防御,二是在中间层(如node)设置专门的防御模块
iframe
来自iframe/button的请求是同源请求
Inject
使用prepared statement,其原理是把数据库操作进行编译,那么攻击者就不能直接用数据库SQL语句了。
还有可以:
DOS
-
正则的DOS: 避免贪婪匹配,利用代码扫描工具,拒绝用户正则
-
DDOS:过滤(负载均衡、异常失败)+ 抗量(CDN,快速自动扩容,非核心服务降级)