Jag*_*esh 4 javascript node.js express
我需要阻止除我自己提供的一两个 IP 之外的所有 IP 地址访问我的网站。我尝试了很多模块,但似乎没有任何效果。
var express = require('express')
var AccessControl = require('express-ip-access-control');
var app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
})
var middleware = AccessControl(options);
app.use(AccessControl(options));
var options = {
mode: 'deny',
denys: [],
allows: ['**8.1**.1.**'],
forceConnectionAddress: false,
log: function(clientIp, access) {
console.log(clientIp + (access ? ' accessed.' : ' denied.'));
},
statusCode: 401,
redirectTo: '',
message: 'Unauthorized'
};
app.listen(3000, function () {
console.log(' app listening on port 3000!')
})
Run Code Online (Sandbox Code Playgroud)
从上面的代码运行和访问我的网站时,我收到的控制台消息为
::ffff:127.0.0.1 accessed.
::ffff:127.0.0.1 accessed.
::ffff:127.0.0.1 accessed.
::ffff:127.0.0.1 accessed.
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
您只需添加自己的中间件来检查 IP,无需包含其他模块。
您可以使用 来查看请求中的 ip req.connection.remoteAddress。
在定义路线之前,添加如下内容:
// Custom Middleware
app.use((req, res, next) => {
let validIps = ['::12', '127.0.0.1']; // Put your IP whitelist in this array
if(validIps.includes(req.connection.remoteAddress)){
// IP is ok, so go on
console.log("IP ok");
next();
}
else{
// Invalid ip
console.log("Bad IP: " + req.connection.remoteAddress);
const err = new Error("Bad IP: " + req.connection.remoteAddress);
next(err);
}
})
Run Code Online (Sandbox Code Playgroud)
如果输入无效 ip,则会抛出错误。在所有路由下方,添加如下内容:
// Error handler
app.use((err, req, res, next) => {
console.log('Error handler', err);
res.status(err.status || 500);
res.send("Something broke");
});
Run Code Online (Sandbox Code Playgroud)