WEB开发的安全之旅2 | 青训营笔记

93 阅读2分钟

这是我参加第四届青训营笔记创作活动的第八天。 今天接着昨天的写(我是真的很喜欢这节课)

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,以确保安全。

总结

其实对各种攻击的防御主要是根据攻击方式来进行一一反击。