Web 开发安全|青训营笔记

93 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

Web 开发安全|青训营笔记

攻击篇

Cross-Site Scripting(XSS)

跨站脚本攻击,通过将脚本注入网页进行攻击

主要利用:

  1. 程序员盲目信任用户提交的内容
  2. 程序员直接将提交的字符串转化为了DOM
    可用API:document.write;element.innerHTML=anystring;SSR(user_data)

特点:

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

    存储型XSS(Stored XSS)

  • 恶意脚本被存在数据库中
  • 访问页面->读数据==被攻击
  • 危害最大,对所有用户可见

    反射型XSS(Reflected XSS)

  • 不涉及数据库;从URL上攻击
  • 在服务端注入

    基于DOM的XSS(DOM-based XSS)

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

    突变型XSS(Mutation-based XSS)

  • 利用了浏览器渲染DOM的特点(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)

    这种攻击最为巧妙,很懂浏览器是怎么进行渲染的,也是最难防御的一种方法。

    Cross-Site request forgery(CSRF)

    跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作,窃取或修改敏感信息。 image.png

    Injection 注入攻击

    SQL注入: image.png

    此外还有 命令行,系统命令注入

    还有SSRF 服务端请求假造,与注入原理类似

    Denial of Service(Dos)

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

    ReDos:根据正则表达式的 Dos

    image.png

    Distributed Dos(DDos)

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

    不搞复杂的,量大就行了 SYN Flood,是靠海量的请求完成攻击 image.png

    中间人攻击

    中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

    利用要素:

    1. 明文传输
    2. 信息篡改不可知
    3. 身份未验证

    image.png

    防御篇

    XSS

  • 永远不信任用户的提交内容,不要将用户提交内容直接转换成DOM
  • 前端主流框架默认防御XSS
  • 后端可以使用 DOMPurify

    CSRF

  • Origin+Referer, 只允许同源脚本执行(GET和HEAD请求在头部中不会加入Origin, 需要进行特殊处理)
  • 利用token并与用户信息绑定, 严格控制权限
  • 利用X-Frame-Options, 禁止iframe透穿执行同源请求
  • 操作进行读写分离, GET和POST分离
  • Same Site Cookie, 禁止Cookie全局携带
  • 利用中间件统一处理CSRF攻击, 例如网关鉴证鉴权

    inject

    对用户进行的操作进行严格管控 image.png

    Dos

    对于前端能做的很少,基本是运维来做。

    ReDos 防御

    image.png

    DDos防御

    image.png

    防御中间人攻击

    使用HTTPS安全协议(HTTPS=HTTP+TLS)