Data Sanitization এবং Validation এর ভূমিকা
Data Sanitization এবং Data Validation হল ওয়েব ডেভেলপমেন্টের গুরুত্বপূর্ণ দুটি পদক্ষেপ, যা ডেটা ইনপুটের নিরাপত্তা এবং সঠিকতা নিশ্চিত করতে সাহায্য করে। TypeORM সহ যেকোনো ডেটাবেস ইন্টারঅ্যাকশনের ক্ষেত্রে, এই দুটি পদ্ধতি কার্যকরীভাবে প্রয়োগ করা অত্যন্ত গুরুত্বপূর্ণ।
- Data Validation হল ডেটার মান যাচাই করা, অর্থাৎ নিশ্চিত করা যে, ডেটা যেটি সিস্টেমে প্রবাহিত হচ্ছে তা সঠিক এবং প্রত্যাশিত ফরম্যাটে আছে।
- Data Sanitization হল ডেটাকে "পরিষ্কার" বা নিরাপদ করা, যেমন, বিশেষ চিহ্ন অপসারণ বা সঠিক ফরম্যাটে রূপান্তর করা, যাতে ডেটা সিস্টেমে প্রবাহিত হওয়ার আগে তা নিরাপদ হয়।
TypeORM এ Data Sanitization এবং Validation এর প্রয়োজনীয়তা
TypeORM একটি ORM (Object-Relational Mapping) লাইব্রেরি, যা ডেটাবেসের সাথে সহজে যোগাযোগ স্থাপন করতে সাহায্য করে। কিন্তু ডেটা ইনপুট করার সময় কিছু সতর্কতা অবলম্বন করা খুবই গুরুত্বপূর্ণ, যাতে সিস্টেমে ভুল বা ক্ষতিকর ডেটা প্রবাহিত না হয়। এখানে Data Validation এবং Sanitization TypeORM এর মাধ্যমে করা যেতে পারে।
১. Data Validation
ডেটা ভ্যালিডেশন হল ইনপুট ডেটার সঠিকতা এবং কার্যকারিতা যাচাই করা। Validation TypeORM এর সাথে সাধারণত class-validator প্যাকেজের মাধ্যমে সম্পন্ন করা হয়। এই প্যাকেজটি ডেটা ভ্যালিডেশনের জন্য ক্লাস ডেকোরেটর সরবরাহ করে।
class-validator ব্যবহার করে Validation
- class-validator ইনস্টল করা:
npm install class-validator class-transformer
- Entity ডেকোরেটর ব্যবহার করে Validation:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsEmail, Length } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Length(3, 100)
name: string;
@Column()
@IsEmail()
email: string;
}
এখানে:
@Length(3, 100)ডেকোরেটরটিnameফিল্ডটির জন্য মিনিমাম এবং ম্যাক্সিমাম ক্যারেক্টার সংখ্যা নির্ধারণ করছে।@IsEmail()ডেকোরেটরটিemailফিল্ডটির জন্য সঠিক ইমেইল ফরম্যাট নিশ্চিত করছে।
- Validation ব্যবহার করার সময়:
import { validate } from "class-validator";
import { User } from "./entity/User";
const user = new User();
user.name = "Jo";
user.email = "invalid-email";
validate(user).then(errors => {
if (errors.length > 0) {
console.log("Validation failed: ", errors);
} else {
console.log("Validation succeeded!");
}
});
এখানে, validate() ফাংশনটি ব্যবহার করে User অবজেক্টটি ভ্যালিড করা হচ্ছে এবং যদি ইনপুট সঠিক না হয়, তাহলে এটি ভ্যালিডেশন এরর দেখাবে।
২. Data Sanitization
Data Sanitization হল একটি প্রক্রিয়া যা ইনপুট ডেটার নিরাপত্তা নিশ্চিত করার জন্য বিশেষ চিহ্ন, স্পেশাল ক্যারেক্টার বা অপ্রত্যাশিত ডেটা সরিয়ে ফেলে। Sanitization TypeORM-এর সাথে সরাসরি সংযুক্ত না হলেও, আমরা সাধারণত validator এবং sanitize ফাংশন ব্যবহার করে ডেটা স্যানিটাইজ করতে পারি।
sanitize-html এবং validator ব্যবহার করে Sanitization
- sanitize-html এবং validator ইনস্টল করা:
npm install sanitize-html validator
- Data Sanitization উদাহরণ:
import * as sanitize from 'sanitize-html';
import * as validator from 'validator';
function sanitizeUserInput(input: string): string {
// Sanitize the input to allow only basic HTML tags
return sanitize(input, {
allowedTags: [ 'b', 'i', 'em', 'strong', 'a' ],
allowedAttributes: {
'a': [ 'href' ]
}
});
}
function validateEmail(input: string): boolean {
// Validate email format
return validator.isEmail(input);
}
const userInput = "<script>alert('xss')</script><b>Valid Text</b>";
const sanitizedInput = sanitizeUserInput(userInput);
console.log(sanitizedInput); // Output: <b>Valid Text</b>
const isEmailValid = validateEmail("test@example.com");
console.log(isEmailValid); // Output: true
এখানে:
- sanitize-html ব্যবহার করে আমরা ইনপুট থেকে স্ক্রিপ্ট ট্যাগ এবং অন্যান্য অপ্রত্যাশিত HTML ট্যাগ সরিয়ে ফেলার জন্য ডেটা স্যানিটাইজ করছি।
- validator.isEmail() ফাংশনটি ইমেইল ইনপুট ভ্যালিডেশন নিশ্চিত করছে।
৩. Sanitization এবং Validation একত্রিত করা
ধরা যাক, আমরা একটি ইউজার ইনপুট গ্রহণ করছি এবং সেক্ষেত্রে ইমেইল এবং নাম ভ্যালিডেট এবং স্যানিটাইজ করতে চাই। নিচে একটি উদাহরণ দেওয়া হলো:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsEmail, Length } from "class-validator";
import * as sanitize from 'sanitize-html';
import * as validator from 'validator';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Length(3, 100)
name: string;
@Column()
@IsEmail()
email: string;
// Custom method for sanitization
sanitizeName() {
this.name = sanitize(this.name);
}
// Custom method for email validation
validateEmail() {
if (!validator.isEmail(this.email)) {
throw new Error('Invalid email format');
}
}
}
এখানে, আমরা sanitizeName() ফাংশনটি ব্যবহার করে name ফিল্ডের ইনপুট স্যানিটাইজ করছি এবং validateEmail() ফাংশনটি ব্যবহার করে ইমেইল ফিল্ডের ইনপুট ভ্যালিডেট করছি।
৪. Middleware ব্যবহার করে Sanitization এবং Validation
TypeORM বা Express.js অ্যাপ্লিকেশনে ইনপুট স্যানিটাইজেশন এবং ভ্যালিডেশন প্রক্রিয়া সাধারণত middleware এর মাধ্যমে সম্পাদন করা হয়। উদাহরণস্বরূপ, Express.js এর সাথে TypeORM ব্যবহার করলে আমরা middleware ব্যবহার করে ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন করতে পারি।
import express from 'express';
import { User } from './entity/User';
import { validate } from 'class-validator';
import * as sanitize from 'sanitize-html';
const app = express();
app.use(express.json());
app.post('/user', async (req, res) => {
const user = new User();
user.name = sanitize(req.body.name);
user.email = req.body.email;
// Validate input data
const errors = await validate(user);
if (errors.length > 0) {
return res.status(400).json(errors);
}
// Save user
const userRepository = await getRepository(User);
await userRepository.save(user);
return res.status(201).send(user);
});
app.listen(3000, () => {
console.log("Server running on port 3000");
});
এখানে, Express.js এর middleware ব্যবহার করে User ডেটার ইনপুট স্যানিটাইজ করা হচ্ছে এবং class-validator দিয়ে ডেটা ভ্যালিডেশন করা হচ্ছে।
সারাংশ
Data Sanitization এবং Data Validation হল নিরাপদ এবং সঠিক ডেটা ইনপুট নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ। TypeORM এর সাথে class-validator এবং sanitize-html প্যাকেজ ব্যবহার করে ইনপুট ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করা যায়। এই পদ্ধতিগুলি ডেটাবেসের সাথে কাজ করার সময় ডেটার নিরাপত্তা এবং ইন্টিগ্রিটি বজায় রাখতে সহায়তা করে, যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য খুবই গুরুত্বপূর্ণ।
Read more