作为开发语言,NodeJS在开发的应用中也会存在诸多其他与语言弱相关的安全漏洞,其类型包括功能实现类、安全功能类以及环境配置类。其中,功能实现类又包含常见的安全漏洞类型,包括命令执行(使用eval()或require()引入)、序列化漏洞、文件上传等等,以及NodeJS特有的供应链安全类漏洞,比如恶意的npm包的引入。
除此之外,还有一种是NodeJS语法本身特有的漏洞,即操作符空格漏洞。比如下方的示例代码:
const session = require('express-session');
const express = require('express');
const app = express();
app.get('/secret', (req, res, next) => {
if(req.session.guestǃ=true) {
res.send("secret_string");
} else {
res.send("Not available to guests");
}
})
if(req.session.guestǃ=true) {
在这行代码中,req.session.guest!=true没有留空格,导致req.session的对象guest!是赋值操作,判断语句始终为真。
作者:repoog
2024年4月22日
洞源实验室