【青训营】- Web开发的安全之旅

121 阅读2分钟

常见攻击方式

  • XSS: Cross-Site Scripting 跨站脚本攻击
  • CSRF: Cross-Site Request Forgery 跨站伪造请求
  • Injection: 注入, 常见的如SQL注入
  • Dos: Denial of Service 拒绝服务攻击
  • 中间人攻击: 各大山寨浏览器

XSS

浏览器直接渲染用户提交的数据, 不进行任何处理

可能发生在前端开发的任何位置

防御策略:

  • 使用主流框架, 大部分默认防御XSS
  • google-closure-library
  • 不要相信用户提交的任何数据
  • 尽量减少自定义内容, 或在渲染自定义内容时进行处理

CSRF

在用户不知情的情况下, 利用用户信息对指定接口进行请求, 完成伪造攻击

并非一定要在脚本运行中进行, 还可以利用用户手动点击a标签和img标签自动加载发送get请求的方式

防御策略:

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

Injection

使用用户自定义的内容

攻击者通过构造特殊的数据内容并提交, 在前端或服务端执行时篡改实际运行的代码逻辑, 并利用其相对较高的权限进行攻击

常见的如SQL注入/SSRF等

防御策略:

  • 尽量减少自定义内容, 或在使用自定义内容时进行处理
  • 对用户操作进行权限管控

DoS

通过某种方式构造请求, 频繁向服务器发送, 造成资源被显著消耗, 无法响应正常的用户请求

拓展有基于正则的ReDos和分布式DDos(Distributed Dos)

除了利用HTTP请求三次握手等待的方式以外, 主要是靠海量的请求完成攻击

防御策略:

  • 对于前端开发人员, 能做的东西很少
  • 对于后端开发人员, 通过网关/熔断/限流/降级等方式维持核心业务稳定

中间人攻击

基于数据明文传输, 中间人隐藏在用户和服务器之间, 实现请求的拦截与转发, 从而达到修改请求内容/伪造返回值/窃取数据等攻击

个人不喜欢国内五花八门的特色浏览器, 我偏执的认为它们可能会进行中间人攻击

防御策略:

  • HTTPS一统天下