这是我参与「第四届青训营」笔记创作活动的第6天
安全问题非常常见,会造成严重的危害,主要危害对象有用户、公司、程序员(离职),因此重视Web开发的安全工作很有必要。接下来就从攻击者和防御者两个角度谈一下Web安全。
二、防御篇
1.针对XSS攻击
- 永远不信任用户的提交内容
- 不要将用户提交的内容直接转换成DOM
防御XSS——现成工具
前端
-
主流框架默认防御XSS,
-
例如react、Vue
Google-closure-library
服务端(Node)
- DOMPurify 但是,用户需求必须动态生成DOM 例如: 1.string ---> DOM
注:我们需要对string进行转义
2.上传svg
注:对svg文件进行扫描,因为按照规范svg之中可以插入script标签,即svg文件被加载,script标签被执行,既完成了一次XSS攻击。
3.自定义跳转链接
尽量不要做让用户自定义跳转链接
否则做好过滤,因为允许自定义链接跳转可以传递JS代码。
例如:
4.自定义样式
补充:Same-origin Policy——同源策略
- 协议
- 域名
- 端口
例如:该图中三个地址都不是同源策略
地址1、2协议不同 地址2、3域名不同
一般而言,对于HTTP请求,同源请求都是没有问题的,但若是跨域即不同源,往往不可行,即需要看请求类型和服务器的设置。
Content Security Policy(CSP)——内容安全策略
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对 eval + inline script 说不
服务器的响应头部
浏览器 meta
2.CSRF的防御
CSRF——token 先有页面,后有请求
用户绑定:攻击者也可以是注册用户===可以过去自己的token 过期时间:前向保密
CSRF——iframe攻击
CSRF anti-pattern GET != GET +POST
避免用户信息被携带:SameSite Cookie
限制的是:
Cookie domain
页面域名
SameSite 与CORS区别:
正确防御CSRF
- 找到项目中查询SQL的地方
- 使用prepared statement
Injection beyond SQL