2012-09-10 17 views
18

द्वारा Node.js- आधारित HTTP सर्वर तक पहुंच प्रतिबंधित करें Iode.js HTTP सर्वर अनुप्रयोग में आईपी पते द्वारा एक्सेस को प्रतिबंधित कैसे कर सकता हूं?आईपी पते

मैं कुछ इस तरह की तलाश में हूँ:

Deny from all 
Allow from .. 

मैं केवल कुछ ही आईपी पतों के लिए साइट के लिए उपयोग की अनुमति की जरूरत है। मैं यह कैसे कर सकता हूँ?

उत्तर

16

मुझे यकीन है कि कैसे बुलेटप्रूफ इस दृष्टिकोण है नहीं कर रहा हूँ, लेकिन यहाँ यह, वेब के आसपास उत्तर से एकत्र किया जाता:

var http = require('http'); 
http.createServer(function (req, res) 
{ 
    var ip = req.ip || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress; 
    if (ip == '127.0.0.1') // exit if it's a particular ip 
     res.end(); 
... 

कृपया, किसी नोड में और अधिक कुशल - मुझे

16

यदि आप को सही पर पूरे सर्वरनेटवर्क पते तक पहुंच प्रतिबंधित कर रहे हैं, तो उन नियमों को अपनी फ़ायरवॉल में रखना सर्वोत्तम है। यदि आप किसी कारण (एप्लिकेशन कॉन्फ़िगरेशन, गतिशील प्रमाणीकरण इत्यादि) के लिए एप्लिकेशन लेयर पर इसे संभालना चाहते हैं तो HTTP अनुरोध के इंतजार के बजाय कनेक्शन पर तुरंत ऐसा करना सर्वोत्तम होता है।

नोड.जेएस 'http.Server emits a connection event जिसे आप रिमोट पता निर्धारित करने और वास्तविक HTTP अनुरोध (या उसके दौरान) कनेक्शन को मारने के लिए उपयोग कर सकते हैं। यह कोड अनचाहे है लेकिन आपको शुरू करना चाहिए:

var server = http.createServer(function (req, res) { 
    // Your normal request handling goes here 
}); 

server.on('connection', function (sock) { 
    console.log(sock.remoteAddress); 
    // Put your logic for what to do next based on that remote address here 
}); 

server.listen(80); 
+1

बहुत अच्छा बिंदु। मैं वर्तमान में एक सिस्टम का उपयोग करता हूं जहां मैं आईपी को नोडजेज़ से लॉग करता हूं और क्रमशः आईपीटीबल्स को अपडेट करने के लिए एक शेल स्क्रिप्ट चला रहा हूं। जब आप कहते हैं कि 'नियमों को हिट करने से पहले, उन नियमों को अपने फ़ायरवॉल में रखें' तो आप निश्चित रूप से सही हैं। –

संबंधित मुद्दे