你以为的 null 不是真的 null,但 bug 是真的 bug!
刷到一篇搞笑的帖子:
用户取用户名为 "null"!
是的,你没看错,不是 Java 里的 null
,不是 SQL 里的 NULL
,而是一个货真价实的字符串 "null"!这玩意儿乍一看人畜无害,但只要你代码里稍不注意,它就能让你怀疑人生。
最近建了一些工作内推群,各大城市都有,欢迎各位HR和找工作的小伙伴进群交流,群里目前已经收集了不少的工作内推岗位。
扫码加苏三的微信:li_su223,备注:所在城市,即可进群。
1. 程序员眼中的 "null" 有多搞笑?
想象一下,你在代码里写:
if (username == null) {
throw new IllegalArgumentException("用户名不能为空!");
}
然后用户提交:
{
"username": "null",
"password": "123456"
}
结果? 你的代码屁都没放,用户成功注册!
为啥?因为 "null"
是个合法的字符串 ,不是 null
!你的代码根本不会拦截它,数据库里就多了一个幽灵用户,名字就叫 "null"。
更搞笑的是,日志里打印:
当前用户:null
你以为是系统异常?不,人家就叫这个名!
用户名为 "null" 会带来哪些问题?
你以为只是个名字?天真!它能让你体验全方位崩溃 :
- 用户体验炸裂
登录后显示:“欢迎您,null!”
用户:???我是谁?我在哪? - 日志排查地狱
日志里全是null
,你根本分不清是真·空值 还是假·字符串 ,只能疯狂 debug。 - 数据库污染
导出 Excel、权限管理、用户去重时,突然冒出一个 "null",你以为是脏数据,结果人家是正经注册的。 - 安全风险
有些系统会把"null"
当成特殊标识符,可能导致 XSS 或信息泄露。 - 自动化脚本翻车
很多脚本会跳过null
值,结果 "null" 用户被漏掉,导致业务逻辑出错。
遇到这种问题怎么办?
别慌,老司机教你几招:
(1)严格校验用户名
别只检查 null
,还要拦截 "null"
、"undefined"
、空格等毒瘤字符串:
private static final Set<String> ILLEGAL\_USERNAMES = Set.of(
"null", "undefined", " ", "\t", "\n", "admin", "root"
);
public void validateUsername(String username) {
if (username == null || ILLEGAL\_USERNAMES.contains(username.trim().toLowerCase())) {
throw new IllegalArgumentException("用户名非法!");
}
}
(2)前端也要拦截
别全甩锅给后端,前端表单校验加个规则:
if (["null", "undefined", ""].includes(username.trim())) {
alert("用户名不能是 null 或 undefined!");
return;
}
(3)数据库约束
加个 CHECK
约束,禁止存入非法用户名:
ALTER TABLE users ADD CONSTRAINT chk\_username
CHECK (username NOT IN ('null', 'undefined', ' '));
(4)日志区分真假 null
打印日志时加个标记:
logger.info("用户名为: {}", username == null ? "[NULL]" : username);
终极建议:别让用户为你的代码买单
用户可能只是手滑,或者系统自动填充了个 "null"
,但最终熬夜 debug 的是你。所以:
- 入口拦截 :注册、导入、API 调用,全都要校验!
- 统一规范 :用户名只能包含字母、数字,长度限制,避免奇葩值。
- 防御性编程 :永远假设用户会输入最离谱的数据!
所有被 "null" 坑过的程序员
你们不是一个人!下次再看到 "null"
,记得先喝杯咖啡,今晚可能又要熬了……
最后欢迎加入苏三的星球,你将获得:100万QPS短链系统、复杂的商城微服务系统、苏三AI项目、刷题吧小程序、秒杀系统、商城系统、秒杀系统、代码生成工具等8个项目的源代码、开发教程和技术答疑。
系统设计、性能优化、技术选型、底层原理、Spring源码解读、工作经验分享、痛点问题、面试八股文等多个优质专栏。
还有1V1免费修改简历、技术答疑、职业规划、送书活动、技术交流。
扫描下方二维码,可以优惠30元:
只有20张优惠券, 数量有限,先到先得。
目前星球已经更新了5800+篇优质内容,还在持续爆肝中.....