खोज…


क्रॉस साइट अनुरोध को रोकना (CSRF)

CSRF एक ऐसा हमला है जो उपयोगकर्ता को एक वेब एप्लिकेशन पर अवांछित कार्यों को निष्पादित करने के लिए मजबूर करता है जिसमें वह वर्तमान में प्रमाणित होता है।

ऐसा इसलिए हो सकता है क्योंकि कुकीज़ को किसी वेबसाइट पर हर अनुरोध के साथ भेजा जाता है - तब भी जब वे अनुरोध किसी अन्य साइट से आते हैं।

हम csurf मॉड्यूल का उपयोग csurf टोकन बनाने और इसे मान्य करने के लिए कर सकते हैं।

उदाहरण

var express = require('express')
var cookieParser = require('cookie-parser')    //for cookie parsing
var csrf = require('csurf')    //csrf module
var bodyParser = require('body-parser')    //for body parsing

// setup route middlewares
var csrfProtection = csrf({ cookie: true })
var parseForm = bodyParser.urlencoded({ extended: false })

// create express app
var app = express()

// parse cookies
app.use(cookieParser())

app.get('/form', csrfProtection, function(req, res) {
  // generate and pass the csrfToken to the view
  res.render('send', { csrfToken: req.csrfToken() })
})

app.post('/process', parseForm, csrfProtection, function(req, res) {
  res.send('data is being processed')
})

इसलिए, जब हम GET /form उपयोग करते हैं, तो यह व्यू के लिए csrf टोकन csrfToken पास करेगा।

अब, दृश्य के अंदर, csrfToken मान को _csrf नामक एक छिपे हुए इनपुट फ़ील्ड के मान के रूप में सेट करें।

उदाहरण के लिए handlebar टेम्प्लेट

<form action="/process" method="POST">
    <input type="hidden" name="_csrf" value="{{csrfToken}}">
    Name: <input type="text" name="name">
    <button type="submit">Submit</button>
</form>

उदाहरण के लिए jade टेम्पलेट

form(action="/process" method="post")
    input(type="hidden", name="_csrf", value=csrfToken)

    span Name:
    input(type="text", name="name", required=true)
    br

    input(type="submit")

उदाहरण के लिए ejs टेम्पलेट

<form action="/process" method="POST">
    <input type="hidden" name="_csrf" value="<%= csrfToken %>">
    Name: <input type="text" name="name">
    <button type="submit">Submit</button>
</form>

Node.js में SSL / TLS

यदि आप अपने Node.js एप्लिकेशन में SSL / TLS को हैंडल करना चुनते हैं, तो विचार करें कि आप इस बिंदु पर SSL / TLS हमले की रोकथाम को बनाए रखने के लिए भी जिम्मेदार हैं। कई सर्वर-क्लाइंट आर्किटेक्चर में, एसएसएल / टीएलएस एक रिवर्स प्रॉक्सी पर समाप्त होता है, दोनों आवेदन की जटिलता को कम करने और सुरक्षा कॉन्फ़िगरेशन के दायरे को कम करने के लिए।

यदि आपका Node.js एप्लिकेशन एसएसएल / टीएलएस को संभालना चाहिए, तो इसे कुंजी और प्रमाणित फ़ाइलों को लोड करके सुरक्षित किया जा सकता है।

यदि आपके प्रमाणपत्र प्रदाता को प्रमाणपत्र प्राधिकारी (CA) श्रृंखला की आवश्यकता होती है, तो इसे सरणी के रूप में ca विकल्प में जोड़ा जा सकता है। किसी एकल फ़ाइल में एकाधिक प्रविष्टियों वाली श्रृंखला को कई फ़ाइलों में विभाजित किया जाना चाहिए और उसी क्रम में सरणी में दर्ज किया जाना चाहिए क्योंकि Node.js वर्तमान में एक फ़ाइल में एकाधिक ca प्रविष्टियों का समर्थन नहीं करता है। 1_ca.crt और 2_ca.crt फ़ाइलों के लिए नीचे दिए गए कोड में एक उदाहरण दिया गया है। यदि ca सरणी की आवश्यकता है और ठीक से सेट नहीं है, तो क्लाइंट ब्राउज़र उन संदेशों को प्रदर्शित कर सकते हैं जो वे प्रमाण पत्र की प्रामाणिकता को सत्यापित नहीं कर सकते हैं।

उदाहरण

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('privatekey.pem'),
  cert: fs.readFileSync('certificate.pem'),
  ca: [fs.readFileSync('1_ca.crt'), fs.readFileSync('2_ca.crt')]
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);

HTTPS का उपयोग करना

Node.js में एक HTTPS सर्वर के लिए न्यूनतम सेटअप कुछ इस तरह होगा:

const https = require('https');
const fs = require('fs');

const httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

const app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

यदि आप भी http अनुरोधों का समर्थन करना चाहते हैं, तो आपको बस यह छोटा संशोधन करने की आवश्यकता है:

const http = require('http');
const https = require('https');
const fs = require('fs');

const httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

const app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);

एक HTTPS सर्वर की स्थापना

एक बार जब आप अपने सिस्टम पर नोड.जेएस स्थापित कर लेते हैं, तो बस एचटीटीपी और एचटीटीपी दोनों के समर्थन के साथ चलने वाले एक मूल वेब सर्वर प्राप्त करने के लिए नीचे दी गई प्रक्रिया का पालन करें!

चरण 1: एक प्रमाणपत्र प्राधिकरण बनाएँ

  1. वह फ़ोल्डर बनाएँ जहाँ आप अपनी कुंजी और प्रमाणपत्र संग्रहीत करना चाहते हैं:

    mkdir conf


  1. उस निर्देशिका पर जाएं:

    cd conf


  1. कॉन्फ़िगरेशन शॉर्टकट के रूप में उपयोग करने के लिए इस ca.cnf फ़ाइल को पकड़ो:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. इस कॉन्फ़िगरेशन का उपयोग करके एक नया प्रमाणपत्र प्राधिकरण बनाएं:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. अब हमारे पास ca-key.pem और ca-cert.pem में हमारे प्रमाणपत्र प्राधिकारी हैं, चलो सर्वर के लिए एक निजी कुंजी उत्पन्न करते हैं:

    openssl genrsa -out key.pem 4096


  1. कॉन्फ़िगरेशन शॉर्टकट के रूप में उपयोग करने के लिए इस server.cnf फ़ाइल को पकड़ो:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. इस कॉन्फ़िगरेशन का उपयोग करके प्रमाणपत्र पर हस्ताक्षर करने का अनुरोध उत्पन्न करें:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. अनुरोध पर हस्ताक्षर करें:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem


चरण 2: अपने प्रमाणपत्र को मूल प्रमाणपत्र के रूप में स्थापित करें

  1. अपने प्रमाणपत्र को अपने रूट प्रमाणपत्र के फ़ोल्डर में कॉपी करें:

    sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem


  1. अद्यतन CA स्टोर:

    sudo update-ca-certificates

सुरक्षित एक्सप्रेस .js 3 अनुप्रयोग

Express.js का उपयोग कर एक सुरक्षित कनेक्शन बनाने के लिए कॉन्फ़िगरेशन (संस्करण 3 के बाद से):

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

// Define your key and cert

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

// your express configuration here

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

// Using port 8080 for http and 8443 for https 

httpServer.listen(8080);
httpsServer.listen(8443);

इस तरह आप देशी http / https सर्वर को एक्सप्रेस मिडलवेयर प्रदान करते हैं

यदि आप चाहते हैं कि आपका ऐप 1024 से नीचे के पोर्ट पर चल रहा हो, तो आपको sudo कमांड (अनुशंसित नहीं) का उपयोग करना होगा या रिवर्स प्रॉक्सी (उदा nginx, haproxy) का उपयोग करना होगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow