• Stars
    star
    272
  • Rank 146,221 (Top 3 %)
  • Language
    TypeScript
  • Created 9 months ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

免费的交互式网络安全自学网,助你成为网络安全达人!纯前端实现,简单易学~

测试鸭 - 交互式网络安全自学网

纯前端实现的交互式网络安全自学网,助你成为网络安全达人!

By 程序员鱼皮

在线体验:http://ceshiya.yupi.icu

演示视频:https://www.bilibili.com/video/BV1y14y1175y/

项目介绍

测试鸭(测逝鸭),一个完全免费的交互式网络安全自学教程网站,它的前身是已经被攻击到倒闭的 面试刷题网(面试鸭)

和传统的教学网站不同,鱼皮结合自己遭受网站攻击的经历和教训,给网站设置了 30 多个漏洞!大家需要通过自由探索和种种提示,发现这些漏洞并对网站造成攻击 🦖,从而在实战中学习到网络安全知识,轻松愉快~

为什么做这样一个网站?

初学网站开发的同学很容易因为各种小的问题导致网站被攻击,造成心理和经济上的损失。

通过这个网站,希望大家都能意识到网络安全的重要性,在开发网站时提升安全防护意识。

学习这些知识是为了更好地防范,而不要利用技术去违法作恶!

20 秒学会使用

1)第一次进入主页时,会自动弹出新手引导,教你如何攻击本网站,跟着引导点击下一步即可

2)页面上的任何一个按钮、任何一个输入框都有可能暗藏玄机。比如疯狂地点击 “收藏” 按钮,不给系统反应的机会,然后 Bug 就出现了。

每当你找到一个 Bug,站长鱼皮的血鸭值都会极速上升,并且你还可以看到鱼皮给出的小知识点,以及一张鱼皮的高清无码发飙图,据说总共有 5 张,集齐之后也许不能召唤神龙,但鱼皮会请你喝茶。

3)可以通过右下角的工具包帮助自己攻击网站:

image-20230823161558892

比如上图的请求工具,可以帮助你绕过前端界面,直接从网站后台获取数据 🐓。

4)点击右下角的 Bug 图标弹出游戏面板,可以查看得分情况、已发现的 Bug、获取提示、查看自己的排名等等。

1 分钟本地启动

由于项目采用纯前端实现,本地启动项目非常简单!

在线访问人数较多,可能会卡顿,所以更推荐大家自己在本地使用~

1)下载本项目代码

2)进入项目根目录,执行 npm install 安装项目依赖

3)执行 npm run dev 本地启动即可

功能和特性

  • 完整的面试刷题网站前端

    • 搜索题目
    • 创建题目
    • 用户登录注册
    • 个人页面
    • 题目选取
    • 题目分类
    • 遇到题目
    • 收藏点赞
  • 30+ 交互式 Bug 关卡

  • 游戏工具箱

  • 游戏面板

技术选型

本项目采用纯前端实现,不需要任何后端的前置知识~

Q:为什么采用纯前端实现?

A:该网站更侧重前端交互,无需后台存储;同时也能减少攻击风险 + 省钱

  • 开发框架:React、Umi
  • 脚手架:Ant Design Pro
  • 组件库:Ant Design、Ant Design Components
  • 语法扩展:TypeScript、Less
  • 打包工具:Webpack
  • 代码规范:ESLint、StyleLint、Prettier
  • 工具库:Intro.js(引导提示)

核心设计

1、网站改造流程

本网站是由一个完整前后端项目 面试鸭 改造而成的纯前端网站,这里分享下通用的网站改造流程,大家可以尝试把自己做的项目也变成交互式教学网站。

步骤如下:

1)完整前端页面开发(已有项目的话这一步默认已完成)

2)页面数据静态化:创建 mock 目录,存放人为编写的假数据;然后将和后端交互的 service 层代码全部改造为操作和获取 mock 目录中的假数据。

3)创建游戏机制:具体实现方式见下

2、游戏机制实现

首先遵循组件化的思想,把所有和游戏相关的代码封装到 games 目录中,并且提供一个 GameBox 组件供前端页面引入,而不是直接侵入现有的业务代码:

怎么实现在用户执行了某个操作后,触发完成对应的关卡呢?

这里采用的实现思想类似于前端监控业务中的 “埋点”。

首先我们在 gameUnit.ts 中定义游戏的关卡(此处称为 unit 单元),示例代码如下:

/**
 * 游戏单元类型
 */
export type GameUnitType = {
  key: string;
  desc: string;
  type: string;
  score: number;
  knowledge: string;
  no?: number; // 题号
  href?: string; // 更多知识的链接
};

/**
 * 游戏单元列表
 */
const GAME_UNIT_LIST: GameUnitType[] = [
  {
    key: 'favourInfinite',
    desc: '收藏按钮可以无限点击',
    type: '逻辑漏洞',
    score: 1,
    knowledge: '网页前端和后端都要对收藏状态进行控制,防止收藏数异常',
  },
  {
    key: 'thumbUpInfinite',
    desc: '点赞可以无限点击',
    type: '逻辑漏洞',
    score: 1,
    knowledge: '网页前端和后端都要对点赞状态进行控制,防止点赞数异常',
  },
];

然后我们编写一个全局游戏状态存储文件 gameState.tsx ,用于记录用户已经完成的关卡、分数、游戏配置等信息:

/**
 * 游戏全局状态类型
 * @author https://yuyuanweb.feishu.cn/wiki/Abldw5WkjidySxkKxU2cQdAtnah yupi
 */
export type GameStateType = {
  init: boolean; // 是否为初始化
  score: number; // 当前分数
  gameTip: boolean; // 是否开启提示
  succeedUnitList: string[]; // 已通过的关卡
};

并且提供一个上报过关通知的函数 doGameUnitSucceed ,参数为上面定义的关卡单元的 key,在该函数中改变当前用户的过关状态,并给出过关弹窗提示。

示例代码如下:

/**
 * 完成游戏
 * @param key
 */
const doGameUnitSucceed = (key: string) => {
  // 已经完成
  if (gameState.succeedUnitList.includes(key)) {
    return;
  }
  gameState.succeedUnitList.push(key);
  const unit = GAME_UNIT_MAP[key];
  gameState.score += unit.score;
  setTimeout(() => {
    Modal.success({
      title: `太棒了,鱼皮的血鸭又高了!😡 ${gameState.score - unit.score} +${unit.score}`,
      content: ...,
      okText: '继续加油!',
    });
  }, 1000);
  updateGameState(gameState);
};

之后,我们只需要在对应的页面和功能代码中,增加一段过关逻辑,符合条件的话就调用 doGameUnitSucceed(关卡key) 过关通知函数,就能实现过关状态的更新和通知了。

比如下面的代码,是在点赞功能中添加过关判断逻辑:

const doThumbUp = async (id: string) => {
  setThumbLoading(true);
  const res = await thumbUpComment(id);
  if (res === 1 || res === -1) {
    comment.thumbNum = (comment.thumbNum ?? 0) + res;
    // 点赞数 > 9 则过关
    if (comment.thumbNum > 9) {
      // 注意这行代码是关键,触发过关
      doGameUnitSucceed('thumbUpInfinite');
    }
  }
};

3、新手指引

引入 Intro.js 库,在 GameBox 游戏组建中定义引导阶段,然后通过 LocalStorage 判断是否首次进入游戏需要展示引导即可。

示例引导阶段代码如下:

const [steps] = useState([
  {
    title: '欢迎来到测逝鸭 🦆',
    intro: '这是一个锻炼你网络安全能力的破站,准备好旅程了么?🧑🏻‍🦲',
    position: 'top',
  },
  {
    title: '目标 🎯',
    intro:
      '你要做的就是运用你的智慧和强大的洞察力,尽可能多地发现并利用该网站的 Bug、对网站造成破坏!🦖',
    nextLabel: '应该的应该的',
  },
  ...
]

4、工具箱实现

工具箱(ToolBox.tsx )本质上就是集成了特定过关方法的页面,算是一种定制化开发。每种工具都作为单独的页面,存放在 tools 目录下。

目录结构

  • public:公共静态资源
  • config:项目配置文件
    • routes.ts:路由
  • doc:文档相关资源
  • src
    • assets:静态资源
    • components:组件
    • constant:常量
    • games:游戏逻辑
      • GameBox.tsx:游戏盒子组件(引入后开启游戏)
      • gameState.tsx:游戏状态管理
      • gameUnit.tsx:游戏单元定义
      • ToolBox.tsx:游戏工具箱
      • tools:具体的游戏工具
    • layouts:页面布局
    • mock:模拟数据
    • models:数据模型定义
    • pages:页面
    • services:业务逻辑
    • plugins:第三方依赖
    • app.tsx:项目入口文件
    • access.ts:项目权限管理
    • wrappers:路由功能增强
      • auth.tsx:自定义权限管理
    • global.less:全局样式文件
  • .eslintrc.js:代码规范
  • .gitignore:提交忽略文件
  • .prettierrc.js:代码美化配置
  • .stylelintrc.js:样式代码美化配置
  • package.json:项目管理
  • tsconfig.json:TS 配置

贡献指南

欢迎各路好汉参与贡献,利人利己~

推荐的贡献方式:增加新的游戏单元(官卡)、修复系统 Bug、补充网络安全知识点,感谢您的贡献。


感谢阅读,也欢迎加入 作者的编程学习圈,学习更多原创项目~

More Repositories

1

codefather

程序员鱼皮的编程宝典。原创编程学习路线,包括经验分享、技术知识、学习资源、学习建议、项目等,适用于所有学习编程 & 求职的同学。已完成 Java、前端
Vue
4,986
star
2

mianshiya-public

干净免费的面试刷题网站,帮助大家拿到满意的 offer!💎 React 前端 + Node 后端 + 云开发全栈项目 by 程序员鱼皮
TypeScript
3,770
star
3

sql-generator

🔨 用 JSON 来生成结构化的 SQL 语句,基于 Vue3 + TypeScript + Vite + Ant Design + MonacoEditor 实现,项目简单(重逻辑轻页面)、适合练手~
Vue
3,355
star
4

free-programming-resources

💎 免费的编程资源大全,持续更新!🔥 覆盖各种语言和方向(Java \ Python \ C++ \ JavaScript \ Golang \ 前端 \ 后端等)的学习路线、贴心教程、项目实战、编程书籍、面试合集、实用资源等,对程序员非常有帮助!
HTML
2,818
star
5

code-nav

💎 专业的编程导航,帮你找到优质的编程学习资源!公众号【编程导航】 ☁️ 前后端均开源,励志成为最好的全栈云开发项目!
JavaScript
2,547
star
6

sql-mother

免费的闯关式 SQL 自学教程网站,从 0 到 1 带大家掌握常用 SQL 语法,纯前端实现,简单易学~
TypeScript
2,478
star
7

yuindex

✨ 新项目 - 极客范儿的浏览器主页 💻 Vue 3 + Node.js 全栈项目,自实现 web 终端 + 命令系统
TypeScript
1,898
star
8

sql-father-backend-public

新项目:快速生成 SQL 和模拟数据的网站(Java 后端),大幅提高开发测试效率!by 程序员鱼皮
Java
1,857
star
9

yulegeyu

羊了个羊纯前端实现版【鱼了个鱼】,自定义关卡+图案+无限道具,可在线玩:https://yulegeyu.cn
TypeScript
1,696
star
10

sql-father-frontend-public

新项目:快速生成 SQL 和模拟数据的网站(React 前端),大幅提高开发测试效率!by 程序员鱼皮
TypeScript
1,361
star
11

daxigua

最简单的魔改发布『 合成大西瓜 』,配套改图工具,不用改代码,修改配置即可!
JavaScript
1,341
star
12

yu-auto-reply

AI 自动回复工具,支持灵活配置多个平台的监控和回答。目前已支持知识星球自动回复、OpenAI(ChatGPT)自动回答
Java
807
star
13

liyupi

506
star
14

yuzi-generator

基于 React + Spring Boot + Picocli + 对象存储的代码生成器共享平台,又分为 3 个循序渐进的子项目:基于命令行的本地代码生成器 + 代码生成器制作工具 + 在线代码生成器平台。实践 Java 命令行应用开发、FreeMarker 模板引擎、多种设计模式、对象存储、十几种优化方法、复杂业务的拆解和系统设计、分布式任务调度系统、Vert.x 响应式编程等
Java
369
star
15

better-coder

😄 一起快乐成长为更好的程序员吧!编程学习经验、技术干货、资源分享
HTML
256
star
16

father

专业的表情包网站,搜表情,找爸爸!适合前端、Java 开发者学习的全栈项目
Java
196
star
17

yucongming-java-sdk

鱼聪明 AI 的 Java SDK,几行代码使用 AI 助手能力!
Java
162
star
18

code-xingqiu

🪐 编程导航知识星球,帮助你学习编程的小圈子。配置公开,大家可以参考该项目做出自己的文档网站。
TypeScript
113
star
19

ikun-test

测试一下你是真爱坤还是小黑子?(Vue3 + Node 实现的移动端答题网站)
JavaScript
97
star
20

yu-rpc

从 0 到 1,带你开发自己的 RPC 框架
Java
84
star
21

yuapi-backend-public

提供 API 接口供开发者调用的平台 💎 by 鱼皮编程导航知识星球
Java
83
star
22

rubbish-yingxiaohao

打击营销号插件,营销号名单大全
JavaScript
67
star
23

yuso-backend-public

一站式聚合搜索平台 💎 by 鱼皮编程导航知识星球
Java
64
star
24

user-center-backend-public

企业核心用户管理系统,用于快速学习项目开发 💎 by 鱼皮编程导航知识星球
Java
54
star
25

yupao-backend-public

帮大家找到好伙伴的移动端网站 💎 by 鱼皮编程导航知识星球
Java
44
star
26

ChatGPT-Web

Vue
40
star
27

good-name

🤔 编程好名生成器,解决取名难题
JavaScript
35
star
28

awesome-cloudbase

☁️ 腾讯云开发资源合集,轻松开发小程序、Web、APP 等全栈应用!
33
star
29

WechatBot

TypeScript
33
star
30

backend-interview

个人整理及搜集的一些后端常用面试题
22
star
31

yu-image-uploader

React Multiple ImageUploader, native & faster & lighter & easier & more efficient
JavaScript
13
star
32

self-python-tools

some easy and useful tools by liyupi
Python
11
star
33

daxigua-tools

帮助你快速修改合成大西瓜的图片
Vue
11
star
34

hahalf

表情包搜索神器
JavaScript
10
star
35

father-backend

表情包网站【爸爸】后端
Java
6
star
36

code-learning

一起学习编程吧!
5
star
37

Design-Model

java design model
Java
3
star
38

Algorithm

algorithm practice
Java
2
star
39

Es-Tutorial

elasticsearch tutorial with swagger so that you can easily debug the restful api
Java
2
star
40

leetcode-c

C++
1
star
41

lyp_web

lazy_(:з」∠)_
JavaScript
1
star
42

Rabbitmq-Tutorial

Java
1
star
43

Useful-front-end-pages

by liyupi himself
HTML
1
star
44

MySQL-Optimizing

mysql optimizing skills
1
star
45

sjtuoj

C++
1
star
46

code-master

搞笑通俗的编程知识大百科
1
star