Web开发的安全之旅 | 青训营笔记

55 阅读3分钟

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

Web开发的安全之旅

在前端web开发过程中,安全也一直使我们老生常谈的话题了,总之一句话就是:

永远不要相信用户输入的任何东西,只能相信自己手下的键盘

今天我们以两个方面来讲解web安全

  • 攻击方
  • 防御方

作为一名开发者 - 防御

XSS防御

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

防御措施

  • 前端

    • 主流框架默认防御XSS
    • goole-closure-librery
  • 服务端(node)

    • DOMPurify

CSRF防御

  • 阻止不明外域的访问

    • 同源检测
    • Samesite Cookie
  • 提交时要求附加本域才能获取的信息

    • CSRF Token
    • 双重Cookie验证

image.png

Dos防御

基于正则的Dos防御

  • Code Review( × /(ab*)+/)
  • 代码扫描+正则性能测试
  • × 用户提供的正则

本地Dos防御

  • 不是非黑即白,有些case只有在请求量大到一定程度后才会体现
  • 分析代码的性能瓶颈
  • 限流

作为一名hacker - 攻击

XSS攻击 (Cross-Site Scripting)

概念

攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

主要利用了:不对用户的输入进行校验盲目信任用户提交的内容后,导致注入伪代码,转换为DOM元素

特点

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

储存式XSS攻击

攻击者直接提交恶意脚本,并且不进行任何验证

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

反射式XSS攻击

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

通过params传参将恶意脚本注入

基于DOM的XSS攻击

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

Mutation-based XSS

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

CSRF攻击 (Cross-site request forgery)

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

概念

攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

分类

  • GET类型的CSRF
  • POST类型的CSRF
  • 链接类型的CSRF

总的来说就是诱导用户做出一些事情,从而实施攻击

DOS

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

特点

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

小demo

image.png

总结

总之不能相信用户输入的任何东西,只能相信自己,甚至自己的后端有时也不可信