【记】一个开发漏掉、测试没注意的BUG!
来源:互联网 发布:淘宝v2是什么意思 编辑:程序博客网 时间:2024/05/18 03:35
临近下班,闲来无事忽然想起Fundebug的BUG监控今天很安静,竟然没有给我推送报警,有点不适应。于是主动登录管理后台看看我们网站有没有出什么严重的bug。
反正闲着也是闲着,干脆来看看能不能把这个错误给解了。
一般看到401都忽略了,基本上都是因为用户在未登录的情况下尝试去访问登录的页面,属于正常情况。可我今天就是好奇,点进去看了一下。
这种错误叫做HTTP请求错误,没有堆栈信息,直接查看用户行为:
用户行为记录很长,总共有20条。在这里我只截取了报错前的4条记录, 分别是:HTTP请求错误、两次HTTP请求和一次点击。
由于是倒序的,我们从下往上看:用户点击了“创建团队”按钮,第一个HTTP请求该邮箱未被注册,返回404, 第二个HTTP请求发送创建请求,成功返回200。然后,```/members/me```的请求报错401了。
明明账户都创建成功了啊,为啥?为啥?为哈?
搞不懂,接着看另一个北京用户的报错:
一模一样,创建完毕后立马报错401!
我不由得陷入了沉思,我将时间跨度选择为一个月甚至全部,依然只有两个错误事件。
每天都有不少用户注册成功,可见并不是每一个注册用户都受到影响,也就是说和他输入的内容有关?
好在GET请求有带参数,眼尖的我很快发现了问题的可能性:xxx@QQ.com,XiaoXianRou@163.com。这些邮箱都是大小写混合的!应该是网站客户端发送给服务器的token解码之后的邮箱地址和服务器本身存储的匹配失败,导致报错“token authentication fail”。
通过查看后端代码,发现问题果真如此。数据库对于邮箱字段设置了小写的限制,会自动将大写转换为小写,而token中的邮箱是原始的包含大小写混合的字段,因此匹配失败。
最后,给大家补充一个关于邮箱大小写的知识点(什么情况下,邮箱账号需要区分大小写?):
根据RFC5321,要求 SMTP 的实现必须区分邮件地址中的 local-part (即 @ 之前的部分)的字母大小写,不过可以看到其原因是“邮件发送方不能假定接收方是大小写不敏感的(或者反过来)”。再看最后一句, RFC5321 对于区分大小写这一做法的态度是“不鼓励”。
2.4. General Syntax Principles and Transaction Model...The local-part of a mailbox MUST BE treated as case sensitive. Therefore, SMTP implementations MUST take care to preserve the case of mailbox local-parts. In particular, for some hosts, the user "smith" is different from the user "Smith". However, exploiting the case sensitivity of mailbox local-parts impedes interoperability and is discouraged.
也就是说邮箱不区分大小写已经是一个约定俗成了,技术上实现必须要考虑进去,并且要小心注意不要漏掉某些接口需要特殊处理。
不看还好,一看还真发现了一个看不懂的报错。
反正闲着也是闲着,干脆来看看能不能把这个错误给解了。
一般看到401都忽略了,基本上都是因为用户在未登录的情况下尝试去访问登录的页面,属于正常情况。可我今天就是好奇,点进去看了一下。
这种错误叫做HTTP请求错误,没有堆栈信息,直接查看用户行为:
用户行为记录很长,总共有20条。在这里我只截取了报错前的4条记录, 分别是:HTTP请求错误、两次HTTP请求和一次点击。
由于是倒序的,我们从下往上看:用户点击了“创建团队”按钮,第一个HTTP请求该邮箱未被注册,返回404, 第二个HTTP请求发送创建请求,成功返回200。然后,```/members/me```的请求报错401了。
明明账户都创建成功了啊,为啥?为啥?为哈?
搞不懂,接着看另一个北京用户的报错:
一模一样,创建完毕后立马报错401!
我不由得陷入了沉思,我将时间跨度选择为一个月甚至全部,依然只有两个错误事件。
每天都有不少用户注册成功,可见并不是每一个注册用户都受到影响,也就是说和他输入的内容有关?
好在GET请求有带参数,眼尖的我很快发现了问题的可能性:xxx@QQ.com,XiaoXianRou@163.com。这些邮箱都是大小写混合的!应该是网站客户端发送给服务器的token解码之后的邮箱地址和服务器本身存储的匹配失败,导致报错“token authentication fail”。
通过查看后端代码,发现问题果真如此。数据库对于邮箱字段设置了小写的限制,会自动将大写转换为小写,而token中的邮箱是原始的包含大小写混合的字段,因此匹配失败。
最后,给大家补充一个关于邮箱大小写的知识点(什么情况下,邮箱账号需要区分大小写?):
根据RFC5321,要求 SMTP 的实现必须区分邮件地址中的 local-part (即 @ 之前的部分)的字母大小写,不过可以看到其原因是“邮件发送方不能假定接收方是大小写不敏感的(或者反过来)”。再看最后一句, RFC5321 对于区分大小写这一做法的态度是“不鼓励”。
2.4. General Syntax Principles and Transaction Model...The local-part of a mailbox MUST BE treated as case sensitive. Therefore, SMTP implementations MUST take care to preserve the case of mailbox local-parts. In particular, for some hosts, the user "smith" is different from the user "Smith". However, exploiting the case sensitivity of mailbox local-parts impedes interoperability and is discouraged.
也就是说邮箱不区分大小写已经是一个约定俗成了,技术上实现必须要考虑进去,并且要小心注意不要漏掉某些接口需要特殊处理。
阅读全文
0 0
- 【记】一个开发漏掉、测试没注意的BUG!
- 不漏掉一个Bug,你需要怎样做?
- Doctrine的一个bug,没找到地方提交
- 一个之前没注意的小知识点1
- 一个之前没注意的小知识点2
- 没注意的细节
- 关于析构的一个漏掉点---单件类
- 测试新手提交Bug时的注意点
- 测试新手提交Bug时的注意点
- 处理字符串的时候遇到的一个小bug,但是一整天都没发现的bug
- Android实习周记:第五周,如果测试没提那么多bug,世界将变成美好的人间
- 关于神一样存在的csdn-一个bug的修复时间是以年记?而且目前还没解决!!!
- 漏掉的账目明细
- Training2:位操作训练 (以前发的那个有个BUG,没注意,对不起大家了,所以重发)
- QQ登录没反应解决方法,及新版QQ的一个BUG
- 今天发现一个hibernate的bug,或者说一个应该注意的地方比较合适
- 今天发现一个hibernate的bug,或者说一个应该注意的地方比较合适
- [前端测试]关于JS判断id的一个Bug
- 搭建CDH版phoenix
- 在Anaconda中安装opencv
- jni: bad arguments passed to 错误
- quartz
- 03:基因相关性
- 【记】一个开发漏掉、测试没注意的BUG!
- 凭照片能配钥匙开家门? 不止!还能开走你的车
- 喂狗机制 Software Dog
- 分区表(二)
- SpringMVC拦截器(资源和权限管理)
- 阿里云OSS(对象存储)的个人见解及使用方法
- php命名空间
- 【详细注释】Java->Socket 服务器与客户端的半双工通讯。拥有详细注释,完美诠释。
- FFmpeg源码剖析-通用:ffmpeg_parse_options()