小白前端学习WEB开发安全之旅|青训营基础班小白笔记及总结(下)Day6~

59 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天

二、防守篇

XSS

  1. 永远不信任用户的提交内容
  2. 不要将用户提交内容直接转换成 DOM

Snipaste_2022-08-23_22-45-20.png

现成工具

前端

  • 主流框架默认防御XSS
  • google-closure-library

服务端(Node)

  • DOMPurify

有时候用户需求必须生成动态dom

例如:

  • string->DOM
  • 上传svg
  • blob动态生成script
  • 自定义跳转链接
  • 自定义样式

Tips:Same-origin policy

Snipaste_2022-08-23_22-56-02.png

CSP(content security policy)

  • -哪些源(域名)被认为是安全的
  • -来自安全源的脚本可以执行,否则直接抛错
  • -对eval+inlinescript说NO!

服务器的响应头部 Snipaste_2022-08-23_23-01-37.png 浏览器meta Snipaste_2022-08-23_23-01-44.png

CSRF的防御

  1. if伪造请求->异常来源
  2. then限制请求来源->限制伪造请求

3.请求头部

  • Origin
  • 同源请求中,GET+HEAD不发送
  • Referer

token

先有页面,后又请求

除了 Origin + Referrer其他判断【请求来自于合法来源】的方式

  1. if(请求来自合法页面)
  2. then(服务器接收过页面请求)
  3. then(服务器可以标识) Snipaste_2022-08-23_23-10-46.png
  • 用户绑定:攻击者也可以是注册用户===可以获取自己的token
  • 过期时间:【前向保密】

iframe攻击

Snipaste_2022-08-23_23-26-01.png

deom:codesandbox.io/s/boring-pt…

anti-pattern

GET!==GET+POST

Snipaste_2022-08-23_23-27-35.png

same-site cooike

Snipaste_2022-08-23_23-29-12.png

Snipaste_2022-08-23_23-29-58.png 限制的是

  1. cooike domain
  2. 页面域名

依赖Cookie的第三方服务怎么办?

内嵌一个X站播放器,识别不了用户登录态,发不了弹幕

Snipaste_2022-08-23_23-33-53.png

SameSite vs CORS

CORS

  • -资源读写(HTTP请求)
  • -资源域名vs页面域名
  • -白名单

SameSite

  • Cookie发送
  • domain vs 页面域名
  • "我跟你说个事儿,
  • 出这屋我可就不认了"

SameSite demo

Snipaste_2022-08-23_23-37-31.png

demo:csb-mnlu0-liuyuchenzh.vercel.app/

SameSite Cooike

Snipaste_2022-08-23_23-40-02.png

正确防御CRSF

Injection

  1. 找到项目中查询SQL的地方
  2. 使用preparedstatement Snipaste_2022-08-23_23-41-51.png

Injection beyond SQL

1.最小权限原则

  • sudo II root

2.建立允许名单+过滤

  • rm

3.对URL类型参数进行协议、域名、ip等限制

  • 访问内网

正确防御DOS

Regex DOS

  • code review(X/(ab*)+/)
  • 代码扫描+正则性能test
  • X用户提供的使用正则

Logical DOS

1.不是非黑即白

  • 有些case,只有在请求量大到一定之后,才会体现

2.分析代码中的性能瓶颈

  • 同步调用(缓存?)
  • 串行逻辑(缓存?)
  • CPU密集型操作

3.限流

DDOS

1.过滤

  • 流量治理
  • 网关
  • API
  • CDN

2.抗量

  • 快速自动扩容
  • 非核心服务降级

防御中间人

http3内置了tls1.3 Snipaste_2022-08-23_23-58-00.png

HTTP一些特性

  1. 可靠性:加密
  2. 完整性:MAC验证
  3. 不可抵赖性:数字签名

tls握手(1.2版) Snipaste_2022-08-24_00-01-22.png

完整性 Snipaste_2022-08-24_00-02-52.png Tips:数字签名(不可抵赖) Snipaste_2022-08-24_00-04-05.png Snipaste_2022-08-24_00-05-36.png 签名算法不够健壮时,会被暴力破解

将HTTP升级到HTTPS Snipaste_2022-08-24_00-08-17.png

SRI(Subresource Intergity)

Snipaste_2022-08-24_00-10-42.png 原始hash vs 实际hash Snipaste_2022-08-24_00-12-28.png Snipaste_2022-08-24_00-12-34.png

补充

  • 安全无小事
  • 使用的依赖可能是最薄弱的一环
  • 保持学习心态

leftpad:blog.npmjs.org/post/141577… esllint scope:eslint.org/blog/2018/0… event stream:eslint.org/blog/2018/0…