নিরাপত্তা ব্যবস্থা এবং ফাইল আপলোড কনফিগারেশন

File Upload এবং Multer ব্যবস্থাপনা - এক্সপ্রেসজেএস (ExpressJS) - Web Development

244

ExpressJS অ্যাপ্লিকেশন তৈরি করার সময় নিরাপত্তা ব্যবস্থার গুরুত্ব অপরিসীম। সঠিক নিরাপত্তা ব্যবস্থা ছাড়া আপনার অ্যাপ্লিকেশন বিপদে পড়তে পারে, বিশেষত যদি আপনি ফাইল আপলোড বা ইউজার ইনপুট গ্রহণ করছেন। এই টিউটোরিয়ালে আমরা ExpressJS-এ নিরাপত্তা ব্যবস্থা এবং ফাইল আপলোড কনফিগারেশন সম্পর্কে আলোচনা করব।


১. ExpressJS-এ নিরাপত্তা ব্যবস্থা

ExpressJS অ্যাপ্লিকেশনকে নিরাপদ রাখতে কিছু সাধারণ নিরাপত্তা ব্যবস্থা অনুসরণ করা উচিত। এগুলোর মধ্যে রয়েছে HTTP হেডার সঠিকভাবে কনফিগার করা, ইনপুট স্যানিটাইজেশন, এবং অনাকাঙ্ক্ষিত অ্যাক্সেস সীমিত করা।

১.১. Helmet ব্যবহার করা

Helmet হলো একটি জনপ্রিয় ExpressJS মডিউল যা HTTP হেডারে নিরাপত্তা সংক্রান্ত সেটিংস যোগ করে। এটি বিভিন্ন ধরনের নিরাপত্তা রক্ষাকারী হেডার অ্যাড করে, যেমন Content Security Policy (CSP), X-Frame-Options, Strict-Transport-Security, এবং আরো অনেক কিছু।

Helmet ইনস্টল করতে:

npm install helmet --save

এবং ExpressJS অ্যাপে Helmet কনফিগার করা:

const express = require('express');
const helmet = require('helmet');
const app = express();

// Helmet ব্যবহার করা
app.use(helmet());

// অ্যাপ্লিকেশন চালু করা
app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

এখানে, app.use(helmet()) কোডটি HTTP হেডারগুলিতে নিরাপত্তা সেটিংস যুক্ত করবে। এটি Cross-Site Scripting (XSS), Clickjacking, এবং অন্যান্য আক্রমণ প্রতিরোধে সাহায্য করে।

১.২. CORS (Cross-Origin Resource Sharing) কনফিগারেশন

CORS কনফিগারেশন দ্বারা আপনি নির্ধারণ করতে পারবেন কোন ডোমেইন থেকে আপনার অ্যাপ্লিকেশনে রিকোয়েস্ট আসবে। ExpressJS-এ CORS কনফিগার করতে cors মডিউল ব্যবহার করা হয়।

CORS ইনস্টল করতে:

npm install cors --save

এবং ExpressJS অ্যাপে CORS কনফিগার করা:

const cors = require('cors');
app.use(cors({
  origin: 'http://alloweddomain.com'  // শুধু এই ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হবে
}));

এখানে:

  • cors(): CORS কনফিগারেশন যুক্ত করে, যাতে শুধু নির্দিষ্ট ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হয়।

১.৩. ইনপুট স্যানিটাইজেশন

ইনপুট স্যানিটাইজেশন এবং ভ্যালিডেশন হল সুরক্ষা ব্যবস্থার অংশ, যা ইউজার ইনপুট থেকে ম্যালিসিয়াস ডেটা বা স্ক্রিপ্ট ফিল্টার করে। এজন্য express-validator ব্যবহার করা যেতে পারে।

npm install express-validator --save

এবং ইনপুট ভ্যালিডেশন:

const { body, validationResult } = require('express-validator');

app.post('/register', 
  body('email').isEmail(),
  body('password').isLength({ min: 5 }),
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    // ইউজার রেজিস্ট্রেশন কোড
  }
);

এখানে:

  • body('email').isEmail(): ইউজারের ইনপুট ঠিকমতো ইমেইল ফরম্যাটে আছে কিনা তা চেক করা হয়।
  • body('password').isLength({ min: 5 }): পাসওয়ার্ডের দৈর্ঘ্য কমপক্ষে ৫ ক্যারেক্টার হতে হবে।

২. ExpressJS-এ ফাইল আপলোড কনফিগারেশন

ফাইল আপলোডের জন্য ExpressJS এ জনপ্রিয় মডিউল multer ব্যবহার করা হয়। এটি ফাইল ডেটা হ্যান্ডল করার জন্য সহজ এবং কার্যকরী।

২.১. Multer ইনস্টল করা

npm install multer --save

২.২. Multer কনফিগার করা

Multer ব্যবহার করার জন্য প্রথমে আপনার ফাইল আপলোড করার জন্য ডিরেক্টরি এবং কনফিগারেশন সেট করতে হবে। এরপর, আপনি ফাইল আপলোড করার জন্য রাউট তৈরি করবেন।

const multer = require('multer');
const path = require('path');

// ফাইল স্টোরেজ কনফিগারেশন
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, './uploads/');  // ফাইল সংরক্ষণ হবে এই ডিরেক্টরিতে
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + path.extname(file.originalname));  // ফাইলের নাম নির্ধারণ করা
  }
});

// Multer ইনস্ট্যান্স তৈরি
const upload = multer({ storage: storage });

// ফাইল আপলোডের রাউট
app.post('/upload', upload.single('file'), (req, res) => {
  res.send('ফাইল সফলভাবে আপলোড করা হয়েছে');
});

এখানে:

  • destination: ফাইলটি কোথায় সংরক্ষিত হবে তা নির্ধারণ করে।
  • filename: ফাইলের নাম কাস্টমাইজ করা যায় (এখানে আমরা বর্তমান সময় ব্যবহার করেছি নামের সাথে)।
  • upload.single('file'): এটি একক ফাইল আপলোডের জন্য ব্যবহৃত হচ্ছে। এখানে 'file' হলো ফর্ম ফিল্ডের নাম।

২.৩. মাল্টিপল ফাইল আপলোড

যদি আপনি একাধিক ফাইল আপলোড করতে চান, তবে upload.array() ব্যবহার করতে পারেন:

app.post('/multiple-upload', upload.array('files', 5), (req, res) => {
  res.send('মাল্টিপল ফাইল সফলভাবে আপলোড করা হয়েছে');
});

এখানে:

  • upload.array('files', 5): এখানে 'files' ফর্ম ফিল্ডের নাম এবং 5 হচ্ছে সর্বোচ্চ ফাইল আপলোডের সংখ্যা।

৩. ফাইল আপলোডের সীমা নির্ধারণ

ফাইলের আকার সীমাবদ্ধ করতে limits কনফিগার করা যায়:

const upload = multer({
  storage: storage,
  limits: { fileSize: 10 * 1024 * 1024 }  // 10MB এর বেশি ফাইল আপলোড হতে দেবে না
});

এখানে:

  • limits: { fileSize: 10 * 1024 * 1024 }: ফাইলের আকার সর্বোচ্চ ১০MB হতে পারে।

৪. ত্রুটি হ্যান্ডলিং

ফাইল আপলোডের সময় ত্রুটি হ্যান্ডলিংও গুরুত্বপূর্ণ। আপনি যদি ফাইলের আকার, প্রকার বা অন্যান্য সীমা অতিক্রম করেন, তবে আপনাকে একটি ত্রুটি বার্তা প্রদান করতে হবে।

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('ফাইল সফলভাবে আপলোড করা হয়েছে');
}, (error, req, res, next) => {
  res.status(500).send('ফাইল আপলোডে ত্রুটি হয়েছে: ' + error.message);
});

এখানে:

  • error.message: ফাইল আপলোডের ত্রুটি বার্তা প্রদান করা হচ্ছে।

সারাংশ

ExpressJS অ্যাপ্লিকেশনে নিরাপত্তা এবং ফাইল আপলোড কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। Helmet এবং CORS ব্যবহারের মাধ্যমে নিরাপত্তা নিশ্চিত করা যায়, এবং express-validator দ্বারা ইনপুট স্যানিটাইজেশন করা সম্ভব। ফাইল আপলোডের জন্য Multer মডিউল ব্যবহার করা হয়, যা সহজেই ফাইল সংরক্ষণ এবং সীমাবদ্ধতা নির্ধারণ করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...