文章目录
Nodejs
Nodejs的文档
http://nodejs.cn/learn
弱类型
大小写比较
跟php比较相似
console.log(1=='1'); //true
console.log(1>'2'); //false
console.log('1'<'2'); //true
console.log(111>'3'); //true
console.log("ad">"v") //false
console.log('asd'>1); //false
总结:数字与字符串比较时:会优先将纯数字型字符串转为数字之后再进行比较;
字符串与字符串比较时:会将字符串的第一个字符转为ASCII码之后再进行比较;
而非数字型字符串与任何数字进行比较都是false。
数组的比较:
console.log([]==[]); //false
console.log([]>[]); //false
console.log([]>[]); //false
console.log([6,2]>[5]); //true
console.log([100,2]<'test'); //true
console.log([1,2]<'2'); //true
console.log([11,16]<"10"); //false
**总结:**空数组之间比较永远为false,
数组与非数值型字符串比较,数组永远小于非数值型字符串;
数组与数值型字符串比较,取第一个之后按前面总结的方法进行比较。
还有一些比较特别的相等比较:
console.log(null==undefined) // 输出:true
console.log(null===undefined) // 输出:false
console.log(NaN==NaN) // 输出:false
console.log(NaN===NaN) // 输出:false
js大小写绕过
大小写特性(P神)
ctfshow web334
看zip中的源码
var express = require('express');
var router = express.Router();
var users = require('../modules/user').items;
var findUser = function(name, password){
return users.find(function(item){
return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;
});
};
/* GET home page. */
router.post('/', function(req, res, next) {
res.type('html');
var flag='flag_here';
var sess = req.session;
var user = findUser(req.body.username, req.body.password);
if(user){
req.session.regenerate(function(err) {
if(err){
return res.json({
ret_code: 2, ret_msg: '登录失败'});
}
req.session.loginUser = user.username;
res.json({
ret_code: 0, ret_msg: '登录成功',ret_flag:flag});
});
}else{
res.json({
ret_code: 1, ret_msg: '账号或密码错误'});
}
});
module.exports = router;
其中
toUpperCase()是javascript中将小写转换成大写的函数。
toLowerCase()是javascript中将大写转换成小写的函数
除此之外
在Character.toUpperCase()函数中,字符ı会转变为I,字符ſ会变为S。
在Character.toLowerCase()函数中,字符İ会转变为i,字符K会转变为k。
所以直接payload(小写绕过)
输入:ctfshow和123456
ES6模板字符串
我们可以使用反引号替代括号执行函数,如:
alert`test!!`
可以用反引号替代单引号双引号,可以在反引号内插入变量,如:
var fruit = `apple`;
console.log`i like ${fruit} very much`;
事实上,模板字符串是将我们的字符串作为参数传入函数中,而该参数是一个数组,该数组会在遇到${}
时将字符串进行分割,具体为下:
["i like ", " very much", raw: Array(2)]
0: "i like "
1: " very much"
length: 2
raw: (2) ["i like ", " very much"]
__proto__: Array(0)
所以有时使用反引号执行会失败,所以如下是无法执行的:
eval`alert(2)`