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

63 阅读4分钟

这是我参与「第四届青训营」笔记创作活动的第4天。
作为刚开始学习前端的萌新们,大多数都不会在自己的学习规划中设计到web安全的学习,是web安全不够重要吗?错,web安全十分的重要,但最初的开发涉及不到安全方面的问题,也不会有人攻击我们的个人网站(当然你的同学攻击可就不算了昂,haha)。这一章就让我们走进web安全,来一起see see到底什么是web安全以及我们怎样学习web安全。 以下内容主要介绍了关于web开发的安全相关的问题。(仅提供一些思想,但不会具体展开说明。)

一、假如你是一个hacker--攻击者

首先,让我们了解一个最常见的攻击方式————xss。XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。 常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.
那么在知道了什么是xss的前提下,让我们来看一下大名鼎鼎的xss有什么特点呢?

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

当然xss跨站脚本攻击,并不单单就指一种攻击方式,具体还有很多的分类。

  • sorted xss(存储型xss攻击)
    • 恶意脚本被存在数据库中
    • 访问页面 -> 读数据===被攻击
    • 危害最大,对全部用户可见
  • reflected xss(反射型xss)
    • 不涉及数据库
    • 从URL上攻击
  • DOM-based xss(基于DOM的xss攻击)
    • 不需要服务器的参与
    • 恶意攻击的发起 + 执行,全在游览器完成
  • Mutation-based xss(基于Mutation的xss攻击)
    • 利用了游览器渲染DOM的特性(独特优化)
    • 不同游览器,会有区别(按游览器进行攻击)

了解完xss,再一起看看另一种攻击方式CSRF(Cross-site request forgery)。其特点是:

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

下面是CSRF攻击的一种情况:

image.png

第三种攻击方式是Injection(注入攻击)

  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF),服务端伪造请求(严格来说,SSRF不是injection,但原理相似)

接下来为SQL Injection攻击流程

image.png

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

  • ReDoS,基于正则表达式的DoS
  • Logical DoS
  • Distributed DoS

二、假如你是一个开发者————防御

通过上一部分,我们大致了解了攻击web最常见的几种方式,那么面对攻击,我们只能束手待毙吗?什么都做不了吗?不,我们可以提前根据攻击方式进行相应的进行防御。
首先是第一种xss攻击。前端方向,目前的主流框架都默认防御xss攻击,或者也可以google-closure-library来进行防御。服务端方面(Node),可以通过DOMPurify来进行防御。当然有些时候,用户需求需要我们动态生成DOM,我们只能要小心注意下面几个点:

  1. string ——> DOM
  2. 上传svg
  3. Blob动态生成script
  4. 自定义跳转链接
  5. 自定义样式

接下来是第二种CSRF的防御:
SameSite

  • Cookie发送
  • domain vs 页面域名
  • “我跟你说个事儿,出这屋我可就不认了”

CORS

  • 资源读写(HTTP请求)
  • 资源域名 vs 页面域名
  • 白名单

然后是第三种Injection的防御:

image.png

最后一种第四种DoS的防御,需要分情况

Regex DoS

  • Code Review
  • 代码扫描 + 正则性能测试
  • 拒绝用户提供的正则

Logical DoS

image.png

DDoS

image.png

本章内容介绍引导就到此结束了,想要具体掌握,还需诸位各自查阅资料,该文章只提供方向。 (萌新小白,根据课程大致写的,不喜勿喷,谢谢。)