6

I do have a running node.js script located in a server. What i want is that it doesn't get directly accessed from browser and also i want that only certain domains/IP-s can call it! Is it possible?!

J Mon
  • 89
  • 3
  • For as far as i know Express isn't able to do conditional blocks on it's own like Nginx and Apache can. So i'm out of ideas at the moment. – J Mon Feb 05 '16 at 23:24

1 Answers1

2

Not sure how to distinguishing between accessing something from a browser as opposed to other software, but restricting access to some domains/IPs should be doable. The following (non production) code to restrict access to the localhost loop back might serve as a starting point:

function securityCheck( req, response, next)
{    var callerIP = req.connection.remoteAddress;
     (callerIP == "::ffff:127.0.0.1" || callerIP == "::1") ? next() : reply404( response);
}

function reply404( response)
{   response.writeHead(404, {"Content-Type": "text/html"});
    response.statusMessage = "Not Found";
    console.log("reply404: statusCode: " + response.StatusCode);
    response.end('<span style="font-weight: bold; font-size:200%;">ERROR 404 &ndash; Not Found<\/span>');
}
var app = express();
app.use(securityCheck);  // restrict access
... // continue with app routing

See also more detailed SO answers to Express.js: how to get remote client address and How do I get the domain originating the request in express.js?

Community
  • 1
  • 1
traktor
  • 12,838
  • 3
  • 23
  • 44