一、XSS,跨站脚本攻击
1.非持久型 XSS(反射型 XSS )
发送带有恶意脚本代码参数的 URL,js从URL拿参数直接执行
2.持久型 XSS(存储型 XSS)
Form 表单提交,js拿可执行的字符串执行
3.防御
- 转义字符,对引号、尖括号、斜杠等进行转义,可借助require('xss')过滤
- CSP,设置 HTTP Header 中的
Content-Security-Policy
,或者设置 meta 标签的方式<meta http-equiv="Content-Security-Policy">
二、CSRF,跨站请求伪造
站点 A本地记录cookie生效的情况下,访问站点 B,B 站点发送恶意请求到站点A
防御
- 请求时附带验证信息,比如验证码或者 Token
- HTTP Referer 检查,但是在https跳转到http,不会发送referer
三、点击劫持
登陆 A 网站,打开第三方网站,它通过 iframe 引入了 A 网站,在它中点击,实际上是点击了 A 网站,例如伪造订阅
防御
- JavaScript 防御,
self !== top
不显示页面 - HTTP请求头
X-FRAME-OPTIONS
,DENY
不允许 iframe显示、SAMEORIGIN
相同域名下iframe 可显示、ALLOW-FROM
指定来源的 iframe可显示
四、URL跳转漏洞
借助未验证的URL跳转,熟悉的链接后面加上一个恶意的网址进行伪装
防御
- URL加入有效性验证Token
- referer,确定传递URL参数进入的来源
五、SQL注入
用户输入数据,服务器的sql拼接了输入的数据
例如万能钥匙,用户名admin' --,影响了sql为SELECT * FROM user WHERE username='admin' --' AND psw='xxxx'
防御
- 对字符串进行转义处理
- 不要直接拼接 SQL 语句,用参数化查询接口
六、OS命令注入攻击
用户输入的数据,shell运行输入的数据
例如:在接口中需要从 github 下载用户指定的 repo
exec(`git clone ${params.repo} /some/path`);
如果 params.repo
传入的是 https://github.com/xx/xx.git && rm -rf /* &&
就糟糕了
防御
- 转义处理
- 正则对内容进行严格限制
- 借助一些工具做拼接、转义预处理,例如 Node.js 的
shell-escape
npm包
本文为阅读笔记,详情请见常见六大Web 安全攻防解析
网友评论