字节跳动第七期技术训练营——“抓到你了”项目

github地址

一. 项目要求:

作业名称

《抓到你了——具备安全防护能力的账号系统》

产品形态

具有安全风控防护能力的账号注册登录系统

产品功能介绍

设计并开发一个登录注册系统,可以支持注册、登录和登出或注销的基本功能,另外也需要对一些黑灰产的用户,例如薅羊毛的这种异常用户,进行识别和制定风控策略进行不同程度的拦截和处罚

要实现的接口包括:

  • 获取验证码
  • 注册
  • 登录
  • 登出或注销

恶意行为的用户:

  • 例如频繁刷注册等
  • 其他的恶意行为可以结合接口自行拓展,可以从恶意用户的角度来考虑进行检测和防护。

对恶意行为用户的处罚主要包括三种措施:

  • 滑块验证:用户通过滑块验证后才能执行后续的动作,在这之前不能继续进行后续的动作
  • 过一段时间重试:用户需要等待一段时间才能执行后续的动作,在这之前不能继续进行后续的动作
  • 拦截用户的请求:对这个用户的请求直接拒绝后续动作的执行

二. 技术栈:

  • 框架
    • springboot
    • spring security
    • mybatis
  • 语言
    • java
    • html
    • css
    • js
  • 数据库
    • mysql
  • 缓存
    • redis
  • 接口测试工具
    • swagger-ui 3

三. 架构图

请添加图片描述

请添加图片描述
请添加图片描述

四. 功能与实现

注册

  1. 一个手机号只能注册一个账号;通过数据库层将手机与账号都设置为唯一索引保证
  2. 用户能通过注册页面注册账户

登录

  1. 设置token有效期为2分钟, 有效期内登陆过的用户可以不登陆直接访问;通过自定义的jwt鉴权过滤器实现

验证码

  1. 图形和手机验证码不会明文发送给前端;是以生成的uuid为key存储在redis中,将uuid发送给前端
  2. 登录采用图形验证码功能,会将图形验证码打印在控制台
  3. 注册采用手机验证码功能,会将手机验证码打印在控制台

注销

  1. 只有登录过的账户才可以注销;因为前端必须发给这个接口token,才可以注销
  2. 通过点击按钮,可以注销当前账号;后端删除redis中的token以及从数据库中删除账号

安全

  1. 未登录用户禁止访问主页面,不允许访问非匿名接口;spring security自带功能
  2. json web token鉴权;token 采用强散列哈希加密,缓存在redis中
  3. 跨域防护;通过自定义的cors过滤器实现
  4. xss注入防护;spring security自带功能
  5. 能过滤掉被加入黑名单和临时封禁的账号;通过自定义的ip过滤器以及redis实现

风控

  1. 用户在一分钟内访问接口次数超过100次,将被禁止访问1min,并且提升违规等级。禁止访问功能的实现是使用redis中的zset数据结构,score为时间戳,获取时按score从大到小排序,使得能更快获取的频繁访问的k-v对,并且可以定期清除已经惩罚结束的用户。
  2. 当用户违规等级不为0时,对用户的行为进行滑块验证码校验;通过redis获取用户的违规等级,如果不为0,给前端的request中增加字段,告诉前端需要启用滑块校验
  3. 当用户违规次数在3~7次时,封禁用户7天;通过redis的zset实现
  4. 当用户违规次数超过7次,加入永久黑名单;通过redis的set实现

五. 可以优化的地方

  1. 黑名单set可以修改为布隆过滤器,通过牺牲极小的准确性,节省大量空间和时间。
  2. 记录接口访问次数可以封装成一个切面,而不是一味地复制粘贴计数代码(这次要记录的接口比较少,所以就没弄)。
  3. 可以考虑根据DDD领域驱动设计的思想,以领域为单位划分类。
  4. 可以进阶架构为分布式结构,构建微服务,并升级缓存为分布式缓存。
  5. 通过请教安全专家,制定更有效的安全策略。

六. 个人收获

  1. 亲身实践了完整的springboot后端开发流程,完全理解Restful接口规范
  2. 理解了spring security的链式鉴权的流程与原理
  3. 理解了缓存的应用场景,对zset、布隆过滤器的使用更加熟练
  4. 增加了debug以及与前端合作开发的经验
  5. 了解了许多mybatis3、swagger-ui3以及springboot2的编码细节与规范
  6. 学会了寻找合适的工具类,避免重复造轮子
  7. 对安全方面的业务有了一定的了解

个人吐槽part:
我一个人一共写了java+xml一共7500行orz[实际历史版本加一起肯定好几万,中间还从session鉴权完全切换成token鉴权,改的累死了],为什么这么简单的业务能写那么多啊啊啊啊啊啊,比较遗憾的是没有后端人员和我一起联合开发,只有我一个人在那堆屎山,偶尔和前端或者测试人员交流一下bug或交互什么的。个人感觉设计或者架构肯定有很多问题,因为我基本上都是自己凭感觉写的,训练营实际上只是给我提供了一个平台或者说是机会,和他人一起开发罢了。课程的内容以及mentor的辅导,不能说是没有,只可以说是完全没用。吐槽完了,该说点好的了,之前也尝试过自己从0开始写项目,但基本写个几百行就直接放弃了,有个项目以及ddl来压迫我去完成也挺好的,也算是迈出了在项目实践方面的一大步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动青训营--前端day8

文章目录 前言一、CSR,SSR,SSG1. CSR2. SSR3. SSG4. SSR,SSG的优势利于SEO更短的首屏时间 二、什么是Next.js三、Next.js客户端开发1. Api2. CSS Modules3. Layout4. 文件式路由 四、Next.js服务端开发 前言 仅以此文章记录学习历程。 一、C…

孙叫兽CSDN社区云----WebIT已创建,欢迎大家前端全栈小伙伴踊跃加入

目录 社区云是什么? 创建CSDN社区云WebIT的目的 推荐分享的技术点(如下图所示) 社区成员权益 版主权益 管理员权益 WebIT社区云积分规则 WebIT优质版主及管理员可以申请直播分享前端技术 WebIT社区云将为社区运营者提供: …

字节跳动在Rust高性能编程探索和实践

本文整理自字节跳动火山引擎基础架构服务框架工程师吴迪于Qcon大会上的分享内容。 嘉宾及内容介绍 本次分享内容主要分为以下三个部分: 我们为什么选择了 Rust 语言;我们做了什么;展望未来:机遇与挑战。 我们为什么选择了 Rust 语…

字节跳动自研 OpenBMC 方案成功上线,STE 团队工程师都做了哪些事?

OpenBMC 是 Linux Foundation 组织里的一个项目,也是目前开源 BMC 里方案最成熟、社区最活跃的项目。日前,我们得知字节跳动系统部 STE 团队自研的 OpenBMC,已在内部成功上线,并稳定运行了两个多月。这也是字节跳动首次正式上线并…

月薪11K!95后房产经纪人转行当程序员:工资过万不难,精神压力也不大

时代在不断的发展,人们对“衣食住行”的要求越来越高,而这其中人们对于“住”是格外的关注。 买房的人希望自己能买到合适的房子,而卖房的人也担心自己的房子卖便宜了,所以越来越多的人在买房卖房这一块儿很难抉择,因…

chatgpt赋能python:Python怎么装Pip

Python怎么装Pip Python是一种非常流行的编程语言,可以用于各种用途,包括网页开发、数据分析、科学计算等。如果你是一个Python编程新手,你可能不知道如何安装和使用Python包。Pip是Python包管理系统,可以帮助你安装和管理Python…

赛事报名启动丨百度Apollo星火自动驾驶大赛开始报名啦!

作为汽车智能化、网联化的关键环节,自动驾驶成为全球科技界、产业界竞争的新赛道。随着人工智能、5G通信、激光雷达、高精地图等多项技术不断完善,自动驾驶的判断力和理解力得到了显著提升。为了推动自动驾驶技术的发展、加快人工智能技术的迭代&#xf…

RocketMQ 在同程旅行的落地实践

本文作者:刘树东 - 同程艺龙技术专家 01/使用概况 同程旅行选择RocketMQ主要基于以下几个方面的考虑: 技术栈:公司主要以 Java 开发为主,因此我们倾向于选择一款用 Java 实现的MQ,且没有任何第三方依赖为最佳&#…

火爆全网的个人行程卡纪念版!3秒教你快速生成!

大家好 咱们直接开门见山! 3 秒生成你的专属行程卡纪念版 用下面这款小工具,只需要 3 秒,就能帮大家生成【行程卡纪念版】。 用一张图片记录你三年去过的地方。 回顾过去三年,我们发现许多美好的回忆已经深深地留在了我们的心中。…

CAN网络管理唤醒功能

采用1043的can 芯片:工作模式 – 正常模式 – 具有 INH 输出以及本地和远程唤醒请求功能的待机模式 – 具有 INH 输出以及本地和远程唤醒请求的低功耗睡眠模式 状态切换流程图: CAN唤醒的需求: 唤醒请求(Wake Up Request) 唤醒请求可分为两种: ● 主动唤醒请求:来自模…

(智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

多核并行主要有两个方面 一,程序,变量储存地址设置 二,运行核选择 一、内存分配 概念及过程描述 尽量将不同的功能划分为各个模块,然后交给不同的cpu运行。 或者说不同的cpu负责运行不同的功能,cpu之间以少量的参…

CK-UR05-US桌面式超高频RFID发卡器开发手册之USB控制命令格式

CK-UR05-US桌面式超高频RFID发卡器支持USB控制命令格式,本文重点就此格式展开说明! CK-UR05-US桌面式超高频RFID发卡器 1、取版本号(GetReaderVersion) 功能:取读写器的硬件、软件版本 命令码: 02H 命令参数:无 命令包: 『40H 02H 02H BCH』 举例: 如…

RFID课程设计-图书管理系统用户端设计

RFID课程设计-图书管理系统用户端设计课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 Android 清单中请求 NFC 访问权限过滤 NFC IntentACTION_NDEF_DISCOVEREDACTION_TAG_DISCOVERED…

Linux炫酷终端仪表盘

最近发现了一个适合装逼的终端命令,会在终端显示一个炫酷的仪表盘(提示:终端全屏显示效果才好) 先上图 首先安装三个软件 sudo apt-get install node nodejs-bin sudo apt install nodejs-legacy sudo apt install git 待会会下…

【袋鼠云】标签系统

文章目录 客户画像标签建设的演进1. 业务单元独立作战2. 离线数仓统一建设3. 实时数据多维补充4. 标签产品化管理5. 数据智能化管理 标签体系设计与加工一、标签体系设计1. 数据梳理2. 基于OLP模型体系化梳理标签3. 定义标签与加工口径 二、标签模型设计三、标签配置1. 根据业务…

AI最新开源:LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊

一周SOTA:LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊 文章目录 1. LMSYS Org发布LongChat,上下文碾压64K开源模型2. 北大团队发布法律大模型 ChatLaw3. 扁鹊:指令与多轮问询对话联合微调的医疗对话大模型 1. LMSY…

pta中级题库

目录 7-1 三个整数排序 7-3 求数列前n项之和 7-4 求一组数据的平均值 7-5 输出图形 7-6 一行字符变换 7-7 sdut- C语言实验——删除指定字符 7-35 二维数组中每行最大值和每行和 7-36 矩阵转置 7-38 二维数组元素变化 7-39 沙漏图形 7-40 连接两个字符串 7-41 统计…

基于等照度线和窗口匹配的图像修补算法

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、关于图像修补 图像修补的目的是基于已有的图像信息或数据库内信息,对缺失区域进行合理地修复。在诸多领域如电影、…

pyecharts-Timeline讲解时间线

Pyecharts----Timeline (*^▽^*) 作者:发现美的眼睛(本人) 首先简单介绍一下pyecharts这个神奇的东东,如果你是从事web,那么Echarts就会熟悉知晓。 ——如果不是,那么这篇文章也会推荐一个非常好的&#x…

计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...

你好微信投票的 Should students make friends online? Some people say yes Internet helps people make many friends Chatting on line, students can express their feelings and opinions more freely, and even get help for their foreign language studies Others, ho…