这是我参加第四届青训营笔记创作活动的第八天。 今天接着昨天的写(我是真的很喜欢这节课)
Web开发的安全
攻击篇
基于传输层
中间人攻击
在浏览器和服务器之间插入中间人
原因:明文传输
信息篡改不可知
对方身份未验证
防御篇
XSS
(永远不要相信用户提交的内容,永远不要将用户提交的的内容荣直接转化成DOM(转化成字符串))
防御工具
前端
- 主流框架默认防御XSS
- google-closure-library
服务端
- DOMPurify
但是用户如果必须生成DOM,我们有以下几种解决方式
- 如果要把字符串生成DOM,注意要对字符串进行转译。
- 上传图片也要扫描。
- 允许自定义跳转要做好防护
CSP内容安全策略
同源:协议,域名,端口都相同。
CSP允许开发者去定义哪些源(域名)被认为是安全的,来自安全源的脚本可以执行,否则直接抛错。
同时可以对eval + inline script直接拒绝。
CSRF(跨站伪造请求的防御方式)
- Origin + Referer
- 标记合法页面 (token必须和具体用户绑定,有一个合法时间)
- iframe的攻击防御(同源):X-Frame-Options:DENY/SAMEORIGIN
CSRF anti-pattern
当开发者使用GET + POST,这个时候攻击者如果使用CSRF进行攻击,不仅用户隐私可能被泄露,甚至用户的数据也可能被篡改。
避免用户信息被携带:SameSite Cookie
CSRF利用用户权限,用户权限在Cookie中,那么如果请求不带上Cookie,那么就从根源解决CSRF。
如果是依赖Cookie的第三方服务:在服务器端进行Set—Cookie操作的时候,可以把SameSite这个属性标志为None,也就是说不对SameSite进行任何限制。但同时我们需要标明这个Cookie是Secure,以确保安全。
总结
其实对各种攻击的防御主要是根据攻击方式来进行一一反击。