node.js学习系列(三) js的大小写特性

字符转换函数

toUpperCase():将小写字符转为大写
toLowerCase():将大写字符转为小写

charCodeAt():将字母转为ascii码
String.fromCharCode(num):将num作为ascii码转为对应字母

fuzz字符

某些非英文字母在经过toUpperCase()toLowerCase()转换时会变成英文字母;可以写个循环来检测:

可见,下面两个字符使用toUpperCase()会产生这种结果:

ſ  =>  F

ı  =>  I

下面这个字符使用toLowerCase()也会转为小写英文字母:

K  =>  k

利用

我们可以利用上述特性来绕过一些判断或检测,例如hacktm上的一道题(已知管理员用户名为hacktm)

1
2
3
4
5
6
7
8
9
10
function isValidUser(u) {
return (
u.username.length >= 3 &&
u.username.toUpperCase() !== config.adminUsername.toUpperCase()
);
}

function isAdmin(u) {
return u.username.toLowerCase() == config.adminUsername.toLowerCase();
}

对用户名进行了两次检测,第一次是输入的用户名转为大写不能等于真实的大写用户名;第二次是输入的用户名转为小写要等于真实的小写用户名

那么构造用户名hacKtm即可绕过这两个检测


参考:

https://xz.aliyun.com/t/7184#toc-11

https://www.leavesongs.com/HTML/javascript-up-low-ercase-tip.html