安全技术研究BrokenAuthentication(NodeJS)
漏洞代码示例
Node.js没有提供一种本地方式来实现健壮的web应用程序身份验证系统。
下面的Express.js路由是对任何访问都不拦截的一个例子;它不强制任何身份验证: app.post("/admin", function (req, res) { // perform some sensitive action });
/admin应该由身份验证机制保护,以免被恶意行为者滥用。
如何防护
根据所选择的web框架应用推荐的身份验证和授权机制。
Express.js
Express.js允许作为中间件实现身份验证。在这种情况下,可以实现一个身份验证中间件,并(重新)将其用于一个或多个路由。例如,下面的中间件检查会话变量的值: function authenticate(req, res, next) { if (!req.session.isLoggedIn) { res.redirect("/index.html"); } else { next(); } }
可以在路由中插入验证检查,如下所示: app.post("/admin", authenticate, function (req, res) { /*...*/ });