零宽空格引发的问题

有人跟我反馈说有bug。

我说:啥bug?

对方说:刚申请的内部用户的账号登录不上去。

我说:还有这种事,报啥错?

登录的时候报了这个错:

图片

我一看还好还好,跟上一次不一样的错,不然我都觉得我穿越回去了。

我脑子都不动一下,直接回复:是不是输入空格了?我看之前的逻辑是不会自动去除首尾空格的。

对方答:

图片

我不信邪,要到账号密码(密码是建立账号后通过邮箱发送的),自己实验了一下,还真的登不上去。

奇了怪了,这块逻辑我看了下,实现很简单,大概逻辑简化后的代码如下:

User user = userService.getOne(username,password);
if (Objects.isnull(user)) {throw new Exception("用户或密码错误");
}

这里的 username 是员工姓名,这个实现我觉得很奇葩...重名了咋办?

搜索条件加了密码避免了重名的情况....

但万一密码一样且重名呢??

理论上这个概率比较低,因为密码够复杂,长度必须为 18 位,且必须包含字母大小写、数字和特殊符号,但是确实是有这个可能,所以为啥不能用手机号当登录账号呢?

算了,不纠结这个,还是来看看为啥登录不上去吧!

看着报错,肯定就是 user 没找到呗,那么我自己输入了一遍账号和密码,确认没输错,于是就怀疑起密码,难道是邮寄发送的密码和数据库实际存储的不一样?

我登上数据库,利用 username 查询这条记录,想对比下密码,发现竟然找不到这条记录??

(假设这个 username 是 aaa)

select * from user where username='aaa';

图片

我的发?难道是账号没生成?

因为发邮件和数据库保存账号肯定不是一个事务操作,所以有几率会发生这种情况。

随即我按照 id 倒序取最新五条看看最近的记录都是啥,又发现有 aaa 这条记录???

我的发?见鬼了吗?

突然开始怀疑这个 username 的格式,直接在阿里云 dms 上点开这个字段,果然发现了猫腻!

图片

可以看到名字中间有红点,而正常的名字中间都是没红点的,那么这个红点是什么玩意?

我把红点拷贝出来,直接一个urlEncode,从界面可以看到输入那边完全看不出有任何东西,但是实际 encode 是有值的:

图片

%E2%80%8B 这又是啥玩意?我直接一个搜索:

图片

零宽空格!!好吧,懂了,破案了,怪不得数据没匹配上!

图片

简单理解就是这个字符正常情况下肉眼不可见,但是它确实存在,所以手输的 aaa 匹配不上存在数据库里面的 aaa,因为数据库的aaa夹了看不见的"内鬼"啊!。

除了零宽空格,还有别的零宽字符,比如零宽非断空格符、零宽度连字符等等,特性都是非打印,即肉眼不可见。

它们可以用来实现隐形水印或者信息加密。

我找了个网站,咱们看看效果:

图片

比如我将'你好'和'好个屁'混合了一下,得到右边的'你好'。

此时复制右边的'你好',decode 以下就能得到隐写的'好个屁':

图片

原理也很简单,将要加密的字符转成二进制,然后按照一定的规则翻译,比如1转成零度空格符、0转成零宽非断空格符,字母间隔用零宽连接符分隔。

然后解密的时候按照上述规则翻译过来即可。

网址贴这里的,有兴趣的可以自己去玩玩 :https://yuanfux.github.io/zero-width-web/

最后我直接把这个姓名重新编辑了一下就好了,操作人员因为是从工单上复制姓名,所以才搞出了这个零宽字符,后续让他手输!

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

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

相关文章

“探寻服务器的无限潜能:从创意项目到在线社区,你会做什么?”

文章目录 每日一句正能量前言什么是服务器?服务器能做什么?服务器怎么用?部署创意项目,还是在线社区亦或做其他的?后记 每日一句正能量 未知的下一秒,千万不要轻言放弃。 前言 在数字化时代,服…

SpringBoot面试题7:SpringBoot支持什么前端模板?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot支持什么前端模板? Spring Boot支持多种前端模板,其中包括以下几种常用的: Thymeleaf:Thymeleaf是一种服务器端Java模板引擎,能够…

基于马尔可夫随机场的图像去噪算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、马尔可夫随机场的基本原理 4.2、基于马尔可夫随机场的图像去噪算法 5.算法完整程序工程 1.算法运行效果图预览 原图: 加入噪声的图像: 滤波后的图像 迭代过程…

2-k8s-控制器介绍

文章目录 一、控制器类型二、Deployment控制器三、SatefulSet控制器四、Daemonset控制器五、Job控制器六、CronJob 控制器 一、控制器类型 Deployment:适合无状态的服务部署StatefullSet:适合有状态的服务部署DaemonSet:一次部署&#xff0c…

关于ts的keyof

type props_type {name: string,age: number }const props: props_type {name: tjq,age: 18 }for (const key in props) { //props[key]出现红色波浪线const value props[key]; }why? 经过我查阅多方资料,在网上看到一个比较合适的例子 地址&#xf…

OpenRemote: Java 开源 IoT 物联网开发平台,匹配智慧城市、智能家居、能源管理

OpenRemote 是一个直观、用户友好的基于Java语言的开源 IoT 物联网设备管理平台,它包括从连接设备到构建应用程序和特定领域的智能应用程序的所有功能和特性。通过OpenRemote物联网平台,用户可以收集和处理来自不同设备的传感器数据,适用于智…

Gson反序列化原理

前言 序列化和反序列化是日常工作中经常使用的工具,一般用于对象的持久化保存或者对象的网络传输,一般有两种情况,一种是对象本身实现了Serializable接口,这种情况下可以利用jdk自带的功能或者Kryo等这种封装好的序列化反序列化工…

Elasticsearch:什么是大语言模型 (LLMs)?

假设你想参加流行的游戏节目 Jeopardy(这是一个美国电视游戏节目,参赛者将获得答案并必须猜测问题)。 要参加演出,你需要了解任何事情的一切。 所以你决定在接下来的三年里每天都花时间阅读互联网上的所有内容。 你很快就会意识到…

关于 Invalid bound statement (not found): 错误的解决

关于 Invalid bound statement not found: 错误的解决 前言错误原因解决方法1. 检查SQL映射文件2. 检查MyBatis配置3. 检查SQL语句4. 检查命名约定5. 清除缓存6. 启用日志记录 重点注意 结语 我是将军我一直都在,。! 前言 当开发Java Spring Boot应用程…

挚文集团:股票回购速度、收入指引均不及预期,令投资者失望

来源:猛兽财经 作者:猛兽财经 挚文集团未来将不再公布MAU数据 今年6月初,挚文集团(MOMO)在公布2023年第一季度业绩时透露,“陌陌应用的月活跃用户(MAU)”已经从去年3月的1.109亿下降到了今年3月的1.065亿,同比下降了-…

2023,简历石沉大海?软件测试岗位真的已经饱和了....

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…

执行事务合伙人和法人区别是什么

1. 定义不同: 执行事务合伙人指负责经营和管理合伙企业的人,对外代表合伙企业进行业务活动,对内负责合伙企业的日常管理。 法人则是企业的法定代表人,代表企业参与民事活动,是企业的行政领导,对企业经济活动…

MAT查找类(岔路口)-技巧

文章目录 前言一、现状二、使用步骤1.导出 hprof2.用MAT打开3.细节操作找大对象的线程名称查看线程的详情查找类的GC Roots柳暗花明检验真理 总结 前言 又是java 内存溢出 OOM JAVA MAT 分析工具大大的好。 高效查找问题根源,才是硬道理。 一、现状 mat 打开hprof…

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述 当使用Nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。 影响版本 Ngin…

vue3后台管理框架之技术栈

vue3全家桶技术 基础构建: vue3vite4TypeScript 代码格式 : eslintprettystylelint git生命周期钩子: husky css预处理器: sass ui库: element-plus 模拟数据: mock 网络请求: axios 路由: vue…

Three.js图案溶解shader

上图提供两种方式溶解显示 上面一排是根据现实的图案红色通道也就是r值进行溶解 下面一排提供额外的溶解纹理 可以通过简单更改呈现多种溶解图案 代码仓库 gitee b站账号:https://space.bilibili.com/374230437 interface IMapPath {map: string;dissolve?: string…

基于antd实现动态修改节点的Tree组件

前言 之前遇到一个需求,可对于任意节点添加或删除子节点。首先技术栈是基于reactant design,ant提供了Tree组件,但都是根据固定的数据渲染出树结构,如果需要新增或删除节点,官网并未提供。 实现过程 新增节点 首先…

910数据结构(2013年真题)

算法设计题 问题1 已知元素数据类型为整数的顺序表SL(a1,a2,…,am,b1,b2,…,bn),试设计算法将SL中元素的两部分互换为(b1,b2,…,bn,a1,a2,…,am)。要求:不能使用额外的数组空间。 (1&#xff…

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率

一、简介 预测金融市场是定量精度和全球经济细微差别的复杂融合。在这一探索中,蒙特卡罗模拟脱颖而出,成为首要的统计工具,指导我们对未来股票价格的理解。 这种方法以摩纳哥著名的蒙特卡洛赌场命名,并不依靠运气,而是植根于严格的概率模型。想象一下在受控环境中精心策划…

前端开发工具有哪些?17款前端工程师必备工具推荐!

软件开发是一个高度专业化的职业分工,根据所使用的编程语言的不同,会细分出多种岗位:前端开发、后端开发、客户端开发、iOS开发、Android开发、数据库开发等等,具体到每一个岗位,工作中常用的工具软件也存在着差别。 …