Web开发安全 | 青训营笔记

54 阅读3分钟

1、Web安全的两个角度

1.1、黑客——攻击者角度

1.1.1、XSS攻击

XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的

image.png

XSS的一些特点

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

XSS攻击分类

  • Stored XSS - 存储型XSS攻击
  • 恶意脚本被存在数据库中国
  • 访问页面 --> 读数据 ≡ 被攻击
  • 危害最大,对全部用户可见
  • Reflected XSS 反射型XSS攻击

不涉及数据库,完全从url上进行攻击

  • DOM-based XSS - 基于DOM的XSS攻击

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

  • Mutation-based XSS
  • 利用浏览器渲染DOM的特性(独特优化)
  • 按不同浏览器的特点进行攻击

1.1.2、Cross-site request forgery(CSRF) - 跨站请求伪造

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

1.1.3、 SQL Injection - 注入攻击

SQL上的恶意注入攻击 image.png

1.1.4、 ReDoS - 基于正则表达式的DoS

基于正则表达式贪婪模式的攻击,攻击者传入一段容易引起不断回溯匹配的字符串,占用服务器接口吞吐量,延长服务器相应时间,致使服务器相应用户操作的时间变长。

  • DDoS

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

攻击特点:直接访问IP,使用任意的API,消耗大量带宽欲将其耗尽

  • 中间人攻击

该攻击发生的条件:信息明文传输、信息篡改不可知、对方身份未验证


1.2、开发者——防御者角度

  • 针对XSS攻击

永远不要信任用户提交的任何内容、永远不要将用户提交的内容直接换成BOM,而更应该将其作为字符串对待

应对XSS的现成工具

  • 前端
    -- 主流框架默认防御XSS
    -- google-closure-library
  • 服务端(Node)
    -- DOMPurify

应对XSS攻击的其他情况

  • 必须动态生成DOM时
    -- 对String进行转义
  • 上传svg时
    -- 先对svg文件进行扫描,是否存在XSS攻击
  • 允许用户自定义跳转链接时
    -- 做好过滤
  • 允许用户自定义样式时
    -- 对能设置自定义样式的地方额外注意做好过滤

Content-Security-Policy(CSP)- 内容安全策略

页面中任何标签必须与设置的同源才允许执行

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可执行,否则直接抛错
  • eval + inline script

CSRF的防御
通过限制请求来源限制攻击

image.png

其他判断请求来自于合法来源的方式

CSRF--token防御机制

image.png

CSRF--iframe攻击

CSRF anti-pattern

GET和POST请求应当区分开,别混用

SameSite Cookie
避免用户信息被携带

限制Cookie domain属性,看其与当前页面域名是否能匹配

  • 依赖Cookie的第三方服务器应对:
    -- 标注该Cookie安全(Secure)
    Set-Cookie: SameSite=None; Secure;

未完