KoaJS একটি লঘু এবং কাস্টমাইজযোগ্য ওয়েব ফ্রেমওয়ার্ক যা Node.js পরিবেশে ব্যবহৃত হয়। ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ফাইল আপলোড একটি গুরুত্বপূর্ণ বিষয়, এবং KoaJS-এ ফাইল আপলোড কনফিগারেশন করা সম্ভব। তবে, ফাইল আপলোডের সময় নিরাপত্তা নিশ্চিত করা অত্যন্ত জরুরি, যাতে আপনার অ্যাপ্লিকেশনটি আক্রমণ থেকে সুরক্ষিত থাকে। এই গাইডে আমরা KoaJS-এ ফাইল আপলোড কনফিগারেশন এবং নিরাপত্তা নিশ্চিত করার বিভিন্ন পদক্ষেপ আলোচনা করব।
ফাইল আপলোড কনফিগারেশন
KoaJS-এ ফাইল আপলোড করতে koa-body বা koa-multer এর মতো মিডলওয়্যার ব্যবহার করা হয়। এই মিডলওয়্যারগুলি ফাইল আপলোডের জন্য প্রয়োজনীয় ফাংশনালিটি সরবরাহ করে।
১. koa-body ইনস্টল এবং ব্যবহার করা
koa-body একটি জনপ্রিয় মিডলওয়্যার যা ফর্ম ডেটা, JSON এবং ফাইল আপলোডকে সমর্থন করে।
ইনস্টলেশন:
npm install koa-body
উদাহরণ:
const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-body');
const path = require('path');
const fs = require('fs');
const app = new Koa();
const router = new Router();
// koa-body মিডলওয়্যার ফাইল আপলোডের জন্য কনফিগার করা
app.use(bodyParser({
multipart: true, // multipart ফর্ম ডেটা গ্রহণ করতে
formidable: {
uploadDir: path.join(__dirname, 'uploads'), // আপলোড ডিরেক্টরি
keepExtensions: true, // ফাইলের এক্সটেনশন ধরে রাখা
maxFileSize: 2 * 1024 * 1024, // 2MB এর বেশি সাইজ না নিতে
}
}));
// ফাইল আপলোড রাউট
router.post('/upload', (ctx) => {
const files = ctx.request.files; // আপলোড করা ফাইলগুলো
ctx.body = {
message: 'File uploaded successfully!',
files: files
};
});
// রাউট মাউন্ট করা
app
.use(router.routes())
.use(router.allowedMethods());
// সার্ভার চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
koa-bodyমিডলওয়্যারটি ফাইল আপলোড এবং ফর্ম ডেটা গ্রহণের জন্য কনফিগার করা হয়েছে।uploadDir-এ ফাইলগুলি সেভ করা হবে।maxFileSizeদ্বারা ফাইল সাইজ সীমাবদ্ধ করা হয়েছে।
২. koa-multer ব্যবহার করা
আরেকটি জনপ্রিয় মিডলওয়্যার হলো koa-multer, যা বিশেষভাবে ফাইল আপলোডের জন্য ব্যবহৃত হয়।
ইনস্টলেশন:
npm install koa-multer
উদাহরণ:
const Koa = require('koa');
const Router = require('koa-router');
const multer = require('koa-multer');
const path = require('path');
const app = new Koa();
const router = new Router();
// ফাইল আপলোডের জন্য কনফিগারেশন
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/'); // আপলোড ডিরেক্টরি
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname)); // ফাইল নাম কাস্টমাইজ করা
}
});
const upload = multer({ storage: storage });
// ফাইল আপলোড রাউট
router.post('/upload', upload.single('file'), (ctx) => {
ctx.body = {
message: 'File uploaded successfully!',
file: ctx.file
};
});
// রাউট মাউন্ট করা
app
.use(router.routes())
.use(router.allowedMethods());
// সার্ভার চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
multer.diskStorageব্যবহার করে ফাইলেরdestinationএবংfilenameকাস্টমাইজ করা হয়েছে।upload.single('file')ব্যবহার করে একটি ফাইল আপলোড করা হচ্ছে।
ফাইল আপলোডের নিরাপত্তা
ফাইল আপলোডের সময় কিছু নিরাপত্তা সতর্কতা অবলম্বন করা অত্যন্ত গুরুত্বপূর্ণ। কিছু সাধারণ নিরাপত্তা পদক্ষেপ নিচে আলোচনা করা হল।
১. ফাইল সাইজ সীমাবদ্ধ করা
বিশাল ফাইল আপলোড করা নিরাপত্তার জন্য ঝুঁকি হতে পারে। তাই ফাইল সাইজ সীমাবদ্ধ করা উচিত।
maxFileSize: 2 * 1024 * 1024 // 2MB সীমাবদ্ধ
এটি ফাইল সাইজ 2MB এর বেশি হতে দেবে না।
২. ফাইল টাইপ ভ্যালিডেশন
ফাইলের টাইপ চেক করা উচিত, যেন শুধুমাত্র নির্দিষ্ট ধরনের ফাইল (যেমন: .jpg, .png, .pdf) আপলোড করা যায়।
const allowedTypes = ['image/jpeg', 'image/png'];
app.use(bodyParser({
formidable: {
filter: function (file) {
if (allowedTypes.indexOf(file.type) === -1) {
throw new Error('Unsupported file type!');
}
return file;
}
}
}));
৩. ফাইল নাম ভ্যালিডেশন
ফাইল নামের মধ্যে স্পেস, স্পেশাল ক্যারেক্টার বা স্ক্রিপ্ট থাকতে পারে যা নিরাপত্তার জন্য ক্ষতিকারক হতে পারে। তাই ফাইল নাম sanitize করা উচিত।
const sanitize = require('sanitize-filename');
const filename = sanitize(file.originalname);
এখানে, sanitize-filename প্যাকেজটি ব্যবহার করে ফাইল নাম sanitize করা হয়েছে, যাতে অযাচিত ক্যারেক্টার এবং স্ক্রিপ্ট থাকে না।
৪. অথেন্টিকেশন এবং অথরাইজেশন
ফাইল আপলোডের আগে ব্যবহারকারীকে অথেন্টিকেট করা এবং যাচাই করা উচিত, যাতে অজ্ঞাত ব্যবহারকারীরা ফাইল আপলোড না করতে পারে।
app.use(async (ctx, next) => {
if (!ctx.state.user) { // যাচাই করা হচ্ছে ব্যবহারকারী লগিন অবস্থায় আছে কিনা
ctx.status = 401;
ctx.body = 'Unauthorized';
return;
}
await next();
});
এখানে, ctx.state.user যাচাই করে ব্যবহারকারীর অথেন্টিকেশন চেক করা হচ্ছে।
সারাংশ
KoaJS-এ ফাইল আপলোড কনফিগারেশন সহজ এবং কার্যকরী। koa-body বা koa-multer মিডলওয়্যার ব্যবহার করে আপনি সহজেই ফাইল আপলোডের জন্য কনফিগারেশন করতে পারেন। তবে, ফাইল আপলোডের সময় নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। কিছু সাধারণ নিরাপত্তা পদক্ষেপ যেমন ফাইল সাইজ সীমাবদ্ধ করা, ফাইল টাইপ ভ্যালিডেশন, ফাইল নাম sanitize করা এবং অথেন্টিকেশন নিশ্চিত করা ফাইল আপলোডকে নিরাপদ করে তোলে। KoaJS-এ এইসব পদক্ষেপ অবলম্বন করলে আপনি একটি সুরক্ষিত এবং কার্যকরী ফাইল আপলোড সিস্টেম তৈরি করতে পারবেন।
Read more