KoaJS, একটি লঘু এবং শক্তিশালী Node.js ফ্রেমওয়ার্ক, যা নিরাপত্তা এবং ডেটার অখণ্ডতা বজায় রাখার জন্য Data Sanitization এবং Input Validation অত্যন্ত গুরুত্বপূর্ণ। এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS-এ ইনপুট ভ্যালিডেশন এবং ডেটা স্যানিটাইজেশন করা যায়, যাতে অ্যাপ্লিকেশনের ডেটা নিরাপদ এবং অখণ্ড থাকে।
১. Input Validation
Input Validation হল এমন একটি প্রক্রিয়া, যেখানে ব্যবহারকারীর ইনপুট (যেমন ফর্মের মাধ্যমে বা API রিকোয়েস্টে) যাচাই করা হয়। এর উদ্দেশ্য হলো ইনপুট ডেটার ফরম্যাট, প্রকার এবং মান সঠিক কিনা তা পরীক্ষা করা। সঠিক ইনপুট যাচাই না করলে SQL Injection, XSS (Cross-Site Scripting) এবং অন্যান্য সিকিউরিটি ঝুঁকি তৈরি হতে পারে।
১.১. Input Validation এর জন্য প্যাকেজ ইনস্টল করা
Input Validation এর জন্য জনপ্রিয় প্যাকেজ হচ্ছে Joi। এটি অত্যন্ত শক্তিশালী এবং কাস্টম ইনপুট ভ্যালিডেশন স্কিমা তৈরি করতে সাহায্য করে।
npm install joi
১.২. Joi ব্যবহার করে Input Validation
এখন, আমরা দেখব কিভাবে Joi ব্যবহার করে ইনপুট ভ্যালিডেশন করা যায়।
const Koa = require('koa');
const Router = require('koa-router');
const Joi = require('joi'); // Joi ইনস্টল করা হয়েছে
const app = new Koa();
const router = new Router();
// ইনপুট ভ্যালিডেশন স্কিমা তৈরি করা
const schema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().min(6).max(30).required(),
email: Joi.string().email().required(),
});
// POST রিকোয়েস্ট হ্যান্ডল করা
router.post('/register', async (ctx) => {
const { error, value } = schema.validate(ctx.request.body); // ইনপুট ভ্যালিডেশন করা
if (error) {
ctx.status = 400; // যদি ইনপুট ভ্যালিডেশন ব্যর্থ হয়
ctx.body = { message: error.details[0].message };
} else {
ctx.status = 200; // ইনপুট ভ্যালিডেশন সফল হলে
ctx.body = { message: 'Registration successful', data: value };
}
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
- Joi Schema ব্যবহার করে আমরা
username,password, এবংemailফিল্ডের জন্য ইনপুট ভ্যালিডেশন তৈরি করেছি। schema.validate()ব্যবহার করে ইনপুট যাচাই করা হয় এবং যদি কোনো ত্রুটি ঘটে, তবে তা রেসপন্স হিসেবে ফেরত দেওয়া হয়।
উদাহরণ ইনপুট:
POST http://localhost:3000/register
{
"username": "JohnDoe",
"password": "password123",
"email": "john.doe@example.com"
}
ভ্যালিডেশন ত্রুটি উদাহরণ:
POST http://localhost:3000/register
{
"username": "JD",
"password": "123",
"email": "john.doe@example"
}
উল্লেখযোগ্য ত্রুটি: "username" length must be at least 3 characters long
২. Data Sanitization
Data Sanitization হল এমন একটি প্রক্রিয়া, যেখানে ব্যবহারকারীর ইনপুট ডেটা অযাচিত বা বিপজ্জনক উপাদানগুলি (যেমন স্ক্রিপ্ট ট্যাগ, SQL ইনজেকশন কোড ইত্যাদি) থেকে মুক্ত করা হয়। এর মাধ্যমে, আপনি XSS (Cross-Site Scripting) আক্রমণ বা SQL ইনজেকশন আক্রমণ প্রতিরোধ করতে পারেন।
২.১. Data Sanitization এর জন্য প্যাকেজ ইনস্টল করা
Data sanitization এর জন্য জনপ্রিয় প্যাকেজ validator। এটি ডেটা স্যানিটাইজেশন এবং ভ্যালিডেশন করার জন্য অত্যন্ত উপযোগী।
npm install validator
২.২. validator ব্যবহার করে Data Sanitization
এখন, আমরা দেখব কিভাবে validator ব্যবহার করে ইনপুট স্যানিটাইজ করা যায়।
const Koa = require('koa');
const Router = require('koa-router');
const validator = require('validator'); // validator প্যাকেজটি ইনস্টল করা হয়েছে
const app = new Koa();
const router = new Router();
// POST রিকোয়েস্ট হ্যান্ডলিং
router.post('/register', async (ctx) => {
let { username, email } = ctx.request.body;
// ইনপুট স্যানিটাইজেশন
username = validator.escape(username); // স্ক্রিপ্ট ট্যাগস থেকে স্যানিটাইজ করা
email = validator.normalizeEmail(email); // ইমেইল স্যানিটাইজ করা
// স্যানিটাইজড ইনপুট যাচাই করা
if (!validator.isLength(username, { min: 3, max: 30 }) || !validator.isEmail(email)) {
ctx.status = 400;
ctx.body = { message: 'Invalid username or email' };
} else {
ctx.status = 200;
ctx.body = { message: 'Registration successful', data: { username, email } };
}
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
validator.escape()ব্যবহার করে আমরা ইনপুট থেকে সমস্ত স্ক্রিপ্ট ট্যাগ এবং অন্যান্য বিপজ্জনক চিহ্ন মুছে ফেলেছি।validator.normalizeEmail()ব্যবহার করে ইমেইল স্যানিটাইজ করা হয়েছে, যাতে কোনো অপ্রয়োজনীয় স্পেস বা ক্যারেক্টার মুছে ফেলা হয়।
উদাহরণ ইনপুট:
POST http://localhost:3000/register
{
"username": "<script>alert('Hacked!');</script>JohnDoe",
"email": " john.doe@example.com "
}
স্যানিটাইজড ইনপুট:
{
"username": "JohnDoe",
"email": "john.doe@example.com"
}
৩. Data Sanitization এবং Input Validation একত্রে ব্যবহার
Data sanitization এবং input validation একসাথে ব্যবহার করা হলে, আপনি আপনার অ্যাপ্লিকেশনের ইনপুট ডেটা সুরক্ষিত এবং অখণ্ড রাখতে পারবেন। নিচে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো:
const Koa = require('koa');
const Router = require('koa-router');
const Joi = require('joi');
const validator = require('validator');
const app = new Koa();
const router = new Router();
// ইনপুট ভ্যালিডেশন স্কিমা তৈরি করা
const schema = Joi.object({
username: Joi.string().min(3).max(30).required(),
email: Joi.string().email().required(),
});
router.post('/register', async (ctx) => {
// ইনপুট স্যানিটাইজেশন
let { username, email } = ctx.request.body;
username = validator.escape(username); // স্ক্রিপ্ট ট্যাগস থেকে স্যানিটাইজ করা
email = validator.normalizeEmail(email); // ইমেইল স্যানিটাইজ করা
// ইনপুট ভ্যালিডেশন
const { error } = schema.validate({ username, email });
if (error) {
ctx.status = 400;
ctx.body = { message: error.details[0].message };
} else {
ctx.status = 200;
ctx.body = { message: 'Registration successful', data: { username, email } };
}
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে, আমরা প্রথমে ইনপুট স্যানিটাইজ করেছি এবং তারপর Joi এর মাধ্যমে ইনপুট ভ্যালিডেশন করেছি। স্যানিটাইজেশন এবং ভ্যালিডেশন একত্রে ব্যবহার করার মাধ্যমে আমরা আরও নিরাপদ ইনপুট গ্রহণ করতে পারি।
সারাংশ
KoaJS-এ Data Sanitization এবং Input Validation অত্যন্ত গুরুত্বপূর্ণ। Joi এবং Validator প্যাকেজের মাধ্যমে আপনি ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন খুব সহজে করতে পারেন। ইনপুট ভ্যালিডেশন ডেটার সঠিকতা এবং অখণ্ডতা নিশ্চিত করে, যখন স্যানিটাইজেশন বিপজ্জনক উপাদান (যেমন XSS বা SQL ইনজেকশন) থেকে সুরক্ষা প্রদান করে। এই পদ্ধতিগুলি ব্যবহার করে আপনি আপনার KoaJS অ্যাপ্লিকেশনকে আরও নিরাপদ এবং শক্তিশালী করতে পারবেন।
Read more