web开发安全|青训营笔记

106 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第5天 web开发安全|青训营笔记

在Web开发的过程当中,安全问题非常“常见”

其会危害

  • 用户
  • 公司
  • 程序员

我们将从两个角度来看Web安全

  • Hacker(骇客) -> 攻击
  • Developer(开发者) -> 防御

攻击篇

Cross-Site Script XSS

其主要利用了

  • 盲目信任用户的提交内容

  • string -> DOM

    • document.write
    • element.innerHTML = anyString;
    • SSR(user_data)

image-20220801104521491.png

XSS的一些特点

  • 通常难以从UI上感知(暗中执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(如弹窗),诱骗用户点击/填写表单

Stored XSS

  • 恶意脚本被存在数据库中
  • 访问页面 -> 读数据 =>被攻击
  • 危害最大,对全部用户可见 其作用相当于向全部用户开放一个共享账户

Reflected CSS

  • 不涉及数据库
  • 从URL上攻击

image-20220801140743426.png

DOM- based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行 ,全在浏览器完成

Reflected 与 DOM-based的不同

image-20220801141119388.png

<noscript><p title="</noscript><img src=x onerror=alert(1)">
    
<div>
    <noscript><p title="</noscript>
    <img src="x" onerror="alert(1)">
    "">"
</div>

Cross-site request forgery(CSRF)

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

CSRF demo

image-20220801200746464.png

SQL Injection

image-20220801200923286.png

Injection 不止于SQL

  • CLI

  • OS command

  • Server-Side Request Forgery(SSRF),服务端伪造请求

    • 严格而言,SSRF不是injection,但是原理类似

Denial of Service(DoS)

通过某些方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。

ReDoS:基于正则表达式的DoS

image-20220801201614957.png

Logical DoS

  • 耗时的同步操作
  • 数据库写入
  • SQL join
  • 文件备份
  • 循环执行逻辑

Logical DoS Demo

image-20220801201850144.png

Distributed DoS(DDoS)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求

攻击特点

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

DDoS demo

image-20220801202207704.png

中间人攻击

image-20220801202343266.png

防御篇

image-20220801202728505.png

image-20220801202743544.png 若需动态生成DOM

  • string -> DOM

  • 上传svg

  • Blob动态生成script

  • 自定义跳转链接

  • 自定义样式

    Same-origin Policy

image-20220801203124002.png

Content Security Policy(CSP)

image-20220801203241215.png

CSRF的防御

image-20220801203403447.png

CSRF - token

image-20220801203439389.png

image-20220801203516680.png

image-20220801203532925.png

CSRF anti-pattern


写在最后: web的开发安全的确是开发中的极为重要的一环,任何攻击,都有可能让大家的努力付之东流,并且对公司,对项目都是不可逆的损失 学好开发的安全管理,比好的开发进度更重要