
是的,你没看错,不是 Java 里的null,不是 SQL 里的NULL,而是一个货真价实的字符串 “null”!这玩意儿乍一看人畜无害,但只要你代码里稍不注意,它就能让你怀疑人生。if (username == null) {
throw new IllegalArgumentException("用户名不能为空!");
}
{
"username": "null",
"password": "123456"
}
"null"是个合法的字符串,不是null!你的代码根本不会拦截它,数据库里就多了一个幽灵用户,名字就叫 “null”。当前用户:null
-
用户体验炸裂
-
日志排查地狱
null,你根本分不清是真·空值还是假·字符串,只能疯狂 debug。-
数据库污染
-
安全风险
"null" 当成特殊标识符,可能导致 XSS 或信息泄露。-
自动化脚本翻车
null 值,结果 “null” 用户被漏掉,导致业务逻辑出错。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("用户名非法!");
}
}
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', ' '));
logger.info("用户名为: {}", username == null ? "[NULL]" : username);
04终极建议
用户可能只是手滑,或者系统自动填充了个"null",但最终熬夜 debug 的是你。所以:-
入口拦截:注册、导入、API 调用,全都要校验!
-
统一规范:用户名只能包含字母、数字,长度限制,避免奇葩值。
-
防御性编程:永远假设用户会输入最离谱的数据!
所有被 “null” 坑过的程序员
你们不是一个人!下次再看到"null",记得先喝杯咖啡,今晚可能又要熬了…
微信赞赏
支付宝扫码领红包
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。侵权投诉:375170667@qq.com






