CORS (Cross-Origin Resource Sharing) এবং Security কনফিগারেশন ওয়েব অ্যাপ্লিকেশন সুরক্ষিত রাখতে অত্যন্ত গুরুত্বপূর্ণ। KoaJS-এ CORS এবং সিকিউরিটি কনফিগারেশন খুব সহজে করা যায়। এই টিউটোরিয়ালে আমরা দেখব কিভাবে KoaJS-এ CORS এবং সিকিউরিটি কনফিগারেশন করা হয়, যাতে অ্যাপ্লিকেশনটি নিরাপদ এবং অন্য ডোমেইন থেকে সহজেই অ্যাক্সেসযোগ্য না হয়।
১. CORS (Cross-Origin Resource Sharing) কনফিগারেশন
CORS হল একটি নিরাপত্তা ফিচার যা ওয়েব পেইজের রিকোয়েস্ট অন্য ডোমেইন থেকে ব্লক করে, যদি সেটি অনুমোদিত না হয়। কেবলমাত্র নির্দিষ্ট ডোমেইনগুলি ওয়েব সার্ভার থেকে ডেটা ফেচ করতে পারে। KoaJS-এ CORS কনফিগারেশন করার জন্য koa-cors লাইব্রেরি ব্যবহার করা হয়।
১.১. koa-cors ইনস্টল করা
প্রথমে koa-cors ইনস্টল করতে হবে:
npm install koa-cors
১.২. koa-cors ব্যবহার করা
এখন আমরা koa-cors মিডলওয়্যার ব্যবহার করে CORS কনফিগারেশন করতে পারি। আপনি origin কনফিগারেশন দিয়ে নির্দিষ্ট ডোমেইন থেকে রিকোয়েস্ট অনুমোদন করতে পারেন।
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('@koa/cors'); // koa-cors প্যাকেজ
const app = new Koa();
const router = new Router();
// CORS কনফিগারেশন
app.use(cors({
origin: 'http://example.com', // শুধুমাত্র example.com থেকে রিকোয়েস্ট অনুমোদন
}));
// একটি রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, Koa with CORS enabled!';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
origin: 'http://example.com'দিয়েছি, যার মানে কেবলমাত্র example.com ডোমেইন থেকে আসা রিকোয়েস্টগুলো অনুমোদিত হবে।
১.৩. CORS কনফিগারেশনে আরও কাস্টমাইজেশন
আপনি CORS কনফিগারেশনে আরও কিছু অপশন যোগ করতে পারেন যেমন:
methods: কোন HTTP মেথডগুলো অনুমোদিত হবে।allowedHeaders: কোন হেডারগুলো অনুমোদিত হবে।
app.use(cors({
origin: '*', // সব ডোমেইন থেকে রিকোয়েস্ট অনুমোদন
methods: ['GET', 'POST'], // শুধুমাত্র GET এবং POST মেথড অনুমোদিত
allowedHeaders: ['Content-Type', 'Authorization'], // শুধুমাত্র নির্দিষ্ট হেডার অনুমোদিত
}));
এখানে:
origin: '*': সমস্ত ডোমেইন থেকে রিকোয়েস্ট অনুমোদিত।methods: ['GET', 'POST']: শুধুমাত্র GET এবং POST মেথড অনুমোদিত।allowedHeaders: ['Content-Type', 'Authorization']: কেবলমাত্র নির্দিষ্ট হেডার অনুমোদিত।
২. Security কনফিগারেশন
KoaJS-এ বিভিন্ন সিকিউরিটি ফিচার যুক্ত করতে কিছু জনপ্রিয় মিডলওয়্যার ব্যবহার করা যায়। এখানে কিছু গুরুত্বপূর্ণ সিকিউরিটি মিডলওয়্যার আলোচনা করা হয়েছে।
২.১. koa-helmet ব্যবহার করা
koa-helmet মিডলওয়্যারটি HTTP হেডার সুরক্ষা যোগ করতে সাহায্য করে, যেমন XSS, Clickjacking, Content-Security-Policy, ইত্যাদি প্রতিরোধ।
npm install koa-helmet
এরপর koa-helmet ব্যবহার করা হয়:
const Koa = require('koa');
const Router = require('koa-router');
const helmet = require('koa-helmet'); // koa-helmet প্যাকেজ
const app = new Koa();
const router = new Router();
// koa-helmet মিডলওয়্যার ব্যবহার করা
app.use(helmet());
// একটি রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, Koa with Helmet!';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে koa-helmet ব্যবহার করে সার্ভারে সিকিউরিটি হেডার যোগ করা হয়েছে।
২.২. koa-rate-limit ব্যবহার করে রেট লিমিটিং
koa-rate-limit প্যাকেজ ব্যবহার করে অ্যাপ্লিকেশনে রেট লিমিটিং প্রয়োগ করা যেতে পারে, যাতে একক IP বা ইউজার বেশি রিকোয়েস্ট না পাঠাতে পারে।
npm install koa-rate-limit
const Koa = require('koa');
const Router = require('koa-router');
const rateLimit = require('koa-rate-limit'); // koa-rate-limit প্যাকেজ
const app = new Koa();
const router = new Router();
// রেট লিমিট কনফিগারেশন
app.use(rateLimit({
driver: 'memory',
db: new Map(), // ইন-মেমরি ডাটাবেস
duration: 60000, // প্রতি মিনিটে রিকোয়েস্ট সংখ্যা সীমাবদ্ধ করা
max: 100, // এক মিনিটে ১০০টি রিকোয়েস্ট অনুমোদিত
message: 'Too many requests, please try again later.'
}));
// একটি রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, Koa with Rate Limiting!';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে, koa-rate-limit প্যাকেজ ব্যবহার করে একটি রেট লিমিট প্রয়োগ করা হয়েছে যা প্রতি মিনিটে ১০০টি রিকোয়েস্ট অনুমোদিত।
২.৩. koa-cors and koa-helmet একসাথে ব্যবহার করা
আপনি CORS এবং সিকিউরিটি হেডার একসাথে ব্যবহার করতে পারেন, যেমন:
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('@koa/cors');
const helmet = require('koa-helmet'); // koa-helmet
const app = new Koa();
const router = new Router();
// CORS এবং Security হেডার কনফিগারেশন
app.use(cors({
origin: '*', // সব ডোমেইন থেকে রিকোয়েস্ট অনুমোদন
}));
app.use(helmet()); // Helmet এর মাধ্যমে সিকিউরিটি হেডার
// একটি রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, Koa with CORS and Helmet!';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে, CORS এবং Helmet একসাথে ব্যবহার করে অ্যাপ্লিকেশনকে সুরক্ষিত করা হয়েছে।
সারাংশ
KoaJS-এ CORS এবং Security কনফিগারেশন খুবই গুরুত্বপূর্ণ। CORS কনফিগারেশন আপনার অ্যাপ্লিকেশনকে অন্য ডোমেইন থেকে আসা অবাঞ্ছিত রিকোয়েস্ট থেকে সুরক্ষিত রাখে। Security কনফিগারেশন যেমন koa-helmet এবং koa-rate-limit অ্যাপ্লিকেশনের নিরাপত্তা বাড়াতে সাহায্য করে। এই প্যাকেজগুলো ব্যবহারে আপনি অ্যাপ্লিকেশনকে বিভিন্ন ধরণের সাইবার আক্রমণ যেমন XSS, Clickjacking, এবং DDoS থেকে সুরক্ষিত রাখতে পারবেন।
CORS (Cross-Origin Resource Sharing) হলো একটি সিকিউরিটি ফিচার যা ব্রাউজার এবং সার্ভারের মধ্যে একসাথে কাজ করার জন্য প্রয়োজনীয় নিয়ম এবং পদ্ধতি নির্ধারণ করে। CORS মূলত একটি নেটওয়ার্ক পলিসি যা একটি ওয়েব পেজকে অন্য একটি ডোমেইন (যা অরিজিন হিসেবে পরিচিত) থেকে রিসোর্স (যেমন API, ইমেজ, ফন্ট, ইত্যাদি) অ্যাক্সেস করতে দেয় বা বাধা দেয়।
Cross-origin বলতে বোঝায়, যখন আপনি আপনার ওয়েব অ্যাপ্লিকেশন থেকে একটি রিকোয়েস্ট পাঠান এবং সেই রিকোয়েস্টটি অন্য একটি ডোমেইনে (অথবা প্রোটোকল বা পোর্টে) যায়। উদাহরণস্বরূপ:
- আপনি যদি
http://example.comথেকেhttp://api.example.comএ রিকোয়েস্ট করেন, এটি Cross-origin রিকোয়েস্ট।
কিছুক্ষেত্রে, ব্রাউজার ডিফল্টভাবে এক ডোমেইনের ওয়েব অ্যাপ্লিকেশনকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করতে দেয় না। তবে CORS পলিসির মাধ্যমে আপনি নির্দিষ্ট ডোমেইন, পদ্ধতি (GET, POST, PUT, DELETE, ইত্যাদি), হেডার ইত্যাদির অনুমতি দিতে পারেন।
CORS এর প্রয়োজনীয়তা
CORS এর প্রয়োজনীয়তা তখনই দেখা দেয় যখন আপনার ওয়েব অ্যাপ্লিকেশন এবং API বিভিন্ন ডোমেইনে থাকে, এবং আপনি সেই API-কে ক্লায়েন্ট সাইড জাভাস্ক্রিপ্ট থেকে অ্যাক্সেস করতে চান। সাধারণভাবে, ব্রাউজার নিরাপত্তা কারণে এক ডোমেইন থেকে অন্য ডোমেইনে রিকোয়েস্ট করার অনুমতি দেয় না, এবং এটি Same-Origin Policy নামে পরিচিত।
Same-Origin Policy: এই নীতি অনুযায়ী, একটি ওয়েব পেজ শুধুমাত্র তার নিজস্ব ডোমেইনে থাকা রিসোর্সগুলিকে অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ:
- আপনি
https://example.comথেকেhttps://api.example.comএ রিকোয়েস্ট পাঠালে, এটি Cross-Origin হবে এবং ব্রাউজার এ ধরনের রিকোয়েস্ট ব্লক করে দেবে।
CORS-এ, সার্ভার সেই রিকোয়েস্টটি গ্রহণ করতে পারবে কিনা এবং কোন ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করবে, তা নির্ধারণ করা হয়।
KoaJS-এ CORS কনফিগারেশন
KoaJS-এ CORS ব্যবস্থাপনার জন্য একটি জনপ্রিয় মিডলওয়্যার হল koa-cors। এটি কনফিগার করার মাধ্যমে আপনি নির্দিষ্ট ডোমেইন, HTTP মেথড, অথবা হেডারের জন্য CORS অনুমোদন দিতে পারেন।
১. koa-cors ইনস্টল করা
প্রথমে, KoaJS অ্যাপ্লিকেশনে koa-cors প্যাকেজটি ইনস্টল করতে হবে:
npm install koa-cors
২. koa-cors কনফিগারেশন এবং ব্যবহারের উদাহরণ
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('koa-cors');
const app = new Koa();
const router = new Router();
// koa-cors মিডলওয়্যার ব্যবহার করা
app.use(cors());
// একটি রাউট তৈরি করা
router.get('/api/data', async (ctx) => {
ctx.body = { message: 'CORS enabled for this route' };
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
ব্যাখ্যা:
app.use(cors()): এটিkoa-corsমিডলওয়্যার ব্যবহার করছে, যা সমস্ত ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে সক্ষম।- সার্ভারটি
/api/dataরাউটে CORS অনুমোদন দেবে, যার মাধ্যমে অন্য ডোমেইন থেকে ক্লায়েন্ট সাইড জাভাস্ক্রিপ্ট API রিকোয়েস্ট করতে পারবে।
৩. CORS কনফিগারেশন অপশন
koa-cors মিডলওয়্যার কনফিগারেশন এর মাধ্যমে আপনি বিভিন্ন প্যারামিটার নিয়ন্ত্রণ করতে পারেন:
app.use(cors({
origin: 'https://example.com', // শুধু এই ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হবে
methods: ['GET', 'POST'], // অনুমোদিত HTTP মেথড
allowedHeaders: ['Content-Type', 'Authorization'], // অনুমোদিত হেডার
credentials: true // ক্রেডেনশিয়ালস (যেমন কুকি) অনুমোদন করা
}));
ব্যাখ্যা:
- origin: কোন ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হবে তা নির্দিষ্ট করতে পারেন। যদি আপনি সমস্ত ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে চান, তাহলে
origin: '*'ব্যবহার করতে পারেন। - methods: কোন HTTP মেথড (GET, POST, PUT, DELETE) অনুমোদিত তা নির্দিষ্ট করা হয়।
- allowedHeaders: যে HTTP হেডারগুলিকে অনুমতি দেওয়া হবে তা নির্দিষ্ট করতে পারবেন।
- credentials: যদি আপনি কুকি বা অন্য কোনো ক্রেডেনশিয়াল (যেমন সেশন) অনুমোদন করতে চান, তাহলে এটি true করতে হবে।
৪. CORS এর নিরাপত্তা
CORS ব্যবস্থাপনা যখন সঠিকভাবে করা হয়, তখন এটি সুরক্ষা প্রদান করে এবং অন্য ডোমেইন থেকে অনাকাঙ্ক্ষিত অ্যাক্সেস বন্ধ করে। তবে, CORS কনফিগারেশনে সতর্কতা অবলম্বন করা উচিত:
- শুধুমাত্র অনুমোদিত ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা উচিত।
- যদি আপনার API ক্রেডেনশিয়ালস বা সেশন অনুমোদন করে, তাহলে
credentials: trueব্যবহার করে সেশন সঠিকভাবে নিরাপদ রাখুন। - অত্যন্ত কনফিগারেবল এবং স্পেসিফিক CORS নীতি গঠন করুন যাতে সুরক্ষা নিশ্চিত হয়।
সারাংশ
CORS (Cross-Origin Resource Sharing) একটি সিকিউরিটি মেকানিজম যা ওয়েব অ্যাপ্লিকেশনকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করতে দেয়। KoaJS-এ koa-cors মিডলওয়্যার ব্যবহার করে CORS কনফিগারেশন করা হয় এবং আপনি বিভিন্ন ডোমেইন, মেথড এবং হেডার ভিত্তিক কনফিগারেশন করতে পারেন। এটি API বা ওয়েব সার্ভারগুলির মধ্যে নিরাপদভাবে যোগাযোগ নিশ্চিত করতে সাহায্য করে। CORS ব্যবস্থাপনা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা এবং এক্সেস কন্ট্রোলের জন্য গুরুত্বপূর্ণ একটি অংশ।
CORS (Cross-Origin Resource Sharing) হল একটি নিরাপত্তা বৈশিষ্ট্য যা ওয়েব ব্রাউজারকে একটি ওয়েব পেজের ডোমেইন থেকে অন্য ডোমেইনে রিকোয়েস্ট করার অনুমতি দেয় বা নিষিদ্ধ করে। KoaJS-এ CORS হ্যান্ডল করার জন্য আপনি koa-cors মিডলওয়্যার ব্যবহার করতে পারেন। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে ক্রস-অরিজিন রিকোয়েস্টগুলিকে সহজ এবং নিরাপদভাবে পরিচালনা করতে সাহায্য করে।
১. koa-cors ইনস্টলেশন
প্রথমে, আপনাকে koa-cors প্যাকেজটি ইনস্টল করতে হবে:
npm install koa-cors
koa-cors মিডলওয়্যারটি CORS পলিসি কনফিগার করে এবং অন্যান্য ডোমেইন থেকে রিকোয়েস্ট আসলে তাকে অনুমতি বা নিষেধ করে।
২. koa-cors কনফিগারেশন এবং ব্যবহার
koa-cors মিডলওয়্যারটি KoaJS অ্যাপ্লিকেশনে খুব সহজভাবে ব্যবহার করা যায়। নিচে একটি উদাহরণ দেওয়া হলো:
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('koa-cors'); // koa-cors ইনপোর্ট করা
const app = new Koa();
const router = new Router();
// koa-cors মিডলওয়্যার ব্যবহার করা
app.use(cors());
// রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, this is a response from the server!';
});
// রাউট মাউন্ট করা
app
.use(router.routes())
.use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে, koa-cors মিডলওয়্যারটি সমস্ত ইনকামিং রিকোয়েস্টের জন্য CORS হ্যান্ডলিং করতে সক্ষম। এটি ক্রস-অরিজিন রিকোয়েস্টকে অনুমতি দেয় এবং সেই অনুযায়ী হেডার সেট করে।
৩. koa-cors কনফিগারেশন
koa-cors মিডলওয়্যারটি অনেক কনফিগারেশন অপশন সরবরাহ করে, যার মাধ্যমে আপনি CORS পলিসি কাস্টমাইজ করতে পারেন। নিচে কিছু গুরুত্বপূর্ণ কনফিগারেশন অপশন দেখানো হলো:
৩.১. Specific Origins নির্ধারণ করা
যদি আপনি কেবল একটি নির্দিষ্ট ডোমেইন বা ডোমেইনগুলিকে অনুমতি দিতে চান, তাহলে origin অপশন ব্যবহার করতে পারেন:
app.use(cors({
origin: 'http://example.com' // শুধু 'example.com' থেকে আসা রিকোয়েস্ট অনুমতি দেওয়া হবে
}));
আপনি একাধিক ডোমেইনও নির্ধারণ করতে পারেন, যেমন:
app.use(cors({
origin: (ctx) => {
const allowedOrigins = ['http://example.com', 'http://another-example.com'];
if (allowedOrigins.includes(ctx.header.origin)) {
return ctx.header.origin; // যদি রিকোয়েস্টের অরিজিন অনুমোদিত থাকে
}
return false; // অন্যথায় CORS অনুমতি দেওয়া হবে না
}
}));
৩.২. HTTP Methods নির্ধারণ করা
আপনি CORS অনুমোদিত HTTP methods কাস্টমাইজ করতে পারেন:
app.use(cors({
methods: ['GET', 'POST', 'PUT', 'DELETE'] // GET, POST, PUT, DELETE মেথডগুলিকে অনুমতি দেওয়া হবে
}));
৩.৩. Access-Control-Allow-Headers কাস্টমাইজ করা
CORS হেডারে অনুমোদিত কাস্টম হেডার যুক্ত করতে পারেন:
app.use(cors({
allowedHeaders: ['Content-Type', 'Authorization'] // শুধু 'Content-Type' এবং 'Authorization' হেডার অনুমতি দেওয়া হবে
}));
৩.৪. Access-Control-Allow-Credentials নির্ধারণ করা
যদি আপনি ক্রস-অরিজিন রিকোয়েস্টে কুকি বা সেশন ডেটা পাঠাতে চান, তবে credentials অপশনটি true সেট করতে হবে:
app.use(cors({
credentials: true // ক্রস-অরিজিন রিকোয়েস্টে কুকি পাঠানো যাবে
}));
৪. CORS হ্যান্ডলিংয়ের উদাহরণ
এখন একটি উদাহরণ দেখুন যেখানে কেবল নির্দিষ্ট ডোমেইনগুলোতে CORS অনুমতি দেওয়া হবে:
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('koa-cors');
const app = new Koa();
const router = new Router();
// CORS কনফিগারেশন
app.use(cors({
origin: (ctx) => {
const allowedOrigins = ['http://example.com', 'http://another-domain.com'];
if (allowedOrigins.includes(ctx.header.origin)) {
return ctx.header.origin; // অনুমোদিত অরিজিন থেকে রিকোয়েস্টের অনুমতি দেওয়া হবে
}
return false; // অন্য অরিজিন থেকে রিকোয়েস্ট নিষিদ্ধ
},
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true
}));
// রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'This is a CORS-enabled route!';
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
- কেবল
http://example.comএবংhttp://another-domain.comঅরিজিন থেকে রিকোয়েস্ট গ্রহণ করা হবে। GETএবংPOSTHTTP মেথডগুলির জন্য CORS অনুমতি দেওয়া হবে।- কেবল
Content-TypeএবংAuthorizationহেডারগুলিকেই অনুমতি দেওয়া হবে। - কুকি এবং ক্রেডেনশিয়াল ডেটা পাঠানো সম্ভব হবে।
সারাংশ
koa-cors মিডলওয়্যার ব্যবহার করে আপনি সহজেই CORS হ্যান্ডলিং করতে পারেন এবং বিভিন্ন কনফিগারেশন অপশন ব্যবহার করে ক্রস-অরিজিন রিকোয়েস্টগুলিকে নিয়ন্ত্রণ করতে পারেন। CORS পলিসি কাস্টমাইজ করে আপনি বিভিন্ন ডোমেইন থেকে আসা রিকোয়েস্টকে অনুমতি বা নিষেধ করতে পারবেন এবং আরও নিরাপদভাবে আপনার API বা ওয়েব অ্যাপ্লিকেশন পরিচালনা করতে পারবেন।
KoaJS একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা Node.js পরিবেশে তৈরি হয়েছে। ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ, এবং একে সুরক্ষিত রাখতে Helmet.js একটি জনপ্রিয় এবং কার্যকরী লাইব্রেরি। Helmet.js বিভিন্ন HTTP হেডার সেট করে, যা আপনার অ্যাপ্লিকেশনকে বিভিন্ন ধরনের নিরাপত্তা ঝুঁকি থেকে রক্ষা করতে সহায়ক হয়, যেমন Cross Site Scripting (XSS), Clickjacking, এবং আরো অনেক ধরনের আক্রমণ।
এতে আপনার অ্যাপ্লিকেশনটি নিরাপদ থাকবে এবং ক্লায়েন্টদের কাছে সুরক্ষিত রেসপন্স প্রদান করবে।
১. Helmet.js ইনস্টল করা
প্রথমে আপনাকে Helmet.js ইনস্টল করতে হবে:
npm install helmet
২. Helmet.js কনফিগারেশন
এখন, আপনি KoaJS অ্যাপ্লিকেশনে Helmet.js ইনস্টল করে এবং নিরাপত্তা হেডার কনফিগারেশন শুরু করতে পারেন।
const Koa = require('koa');
const Router = require('koa-router');
const helmet = require('helmet');
const app = new Koa();
const router = new Router();
// Helmet.js মিডলওয়্যার ব্যবহার করা
app.use(helmet());
// একটি সাধারণ রাউট তৈরি করা
router.get('/', async (ctx) => {
ctx.body = 'Hello, Koa with Helmet!';
});
app
.use(router.routes())
.use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে, helmet() মিডলওয়্যারটি আপনার অ্যাপ্লিকেশনকে বিভিন্ন নিরাপত্তা হেডার সেট করতে সাহায্য করে। এটি প্রতিটি রিকোয়েস্টের জন্য বিভিন্ন নিরাপত্তা ব্যবস্থা প্রদান করবে, যেমন:
X-Content-Type-Options: MIME type sniffing থেকে রক্ষা।Strict-Transport-Security: HTTPS ব্যবহার নিশ্চিত করতে।X-Frame-Options: Clickjacking আক্রমণ প্রতিরোধ।X-XSS-Protection: Cross-site scripting (XSS) আক্রমণ থেকে রক্ষা।Content-Security-Policy (CSP): কনটেন্ট নিরাপত্তা নীতি সেট করা।
৩. Helmet.js এর বিভিন্ন অপশন কনফিগারেশন
Helmet.js অনেক কনফিগারেশন অপশন প্রদান করে যেগুলি আপনাকে আপনার অ্যাপ্লিকেশনের নিরাপত্তা বাড়ানোর জন্য কাস্টমাইজ করতে সাহায্য করে। নিচে কিছু গুরুত্বপূর্ণ Helmet.js এর অপশন দেওয়া হল:
৩.১. helmet.contentSecurityPolicy()
Content Security Policy (CSP) অ্যাপ্লিকেশনকে XSS আক্রমণ থেকে রক্ষা করার জন্য একটি নিরাপত্তা হেডার। আপনি এটি কাস্টমাইজ করতে পারেন:
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"], // নিজস্ব ডোমেইন ছাড়া অন্য কোনো রিসোর্স লোড করতে দিবে না
scriptSrc: ["'self'", "trusted-scripts.com"], // নির্দিষ্ট উৎস থেকে স্ক্রিপ্ট লোড করা যাবে
objectSrc: ["'none'"], // কোন অবজেক্ট লোড করা যাবে না
styleSrc: ["'self'", "trusted-styles.com"] // নির্দিষ্ট উৎস থেকে স্টাইল লোড করা যাবে
}
})
);
এখানে, CSP হেডারের মাধ্যমে আপনি নির্দিষ্ট ডোমেইন বা উৎস থেকে কনটেন্ট লোড করতে অনুমতি দিতে পারেন।
৩.২. helmet.hidePoweredBy()
ডিফল্টভাবে, KoaJS এবং অন্যান্য ফ্রেমওয়ার্কগুলি X-Powered-By হেডার পাঠায় যা অ্যাপ্লিকেশনটির সম্পর্কে তথ্য প্রকাশ করে। আপনি এটি helmet.hidePoweredBy() ব্যবহার করে সরিয়ে দিতে পারেন।
app.use(helmet.hidePoweredBy());
এটি অ্যাপ্লিকেশনের নিরাপত্তা বাড়াবে কারণ হ্যাকাররা সাধারণত X-Powered-By হেডার থেকে প্রযুক্তিগত তথ্য সংগ্রহ করতে পারে।
৩.৩. helmet.referrerPolicy()
Referrer policy কনফিগারেশন আপনার অ্যাপ্লিকেশন থেকে কোন রেফারার তথ্য পাঠানো উচিত তা নিয়ন্ত্রণ করে। এটি তথ্য গোপনীয়তা বাড়াতে সাহায্য করতে পারে।
app.use(helmet.referrerPolicy({ policy: 'no-referrer' }));
এটি নিশ্চিত করবে যে কোনও রেফারার তথ্য পাঠানো হবে না। আপনি আরও বিভিন্ন নীতি যেমন 'same-origin', 'strict-origin' ইত্যাদি ব্যবহার করতে পারেন।
৩.৪. helmet.frameguard()
Clickjacking আক্রমণ প্রতিরোধ করতে X-Frame-Options হেডার সেট করতে helmet.frameguard() ব্যবহার করা হয়।
app.use(helmet.frameguard({ action: 'deny' }));
এটি নির্দিষ্ট করবে যে কোনো পেজকে অন্য কোনো ওয়েব পেজের ফ্রেম বা iframe-এ লোড করা যাবে না। 'deny' অপশনটি সম্পূর্ণভাবে ফ্রেমিং নিষিদ্ধ করে।
৪. Helmet.js এর অন্যান্য অপশন
Helmet.js আরও কিছু নিরাপত্তা হেডার প্রদান করে যা ব্যবহারকারী ডেটা এবং অ্যাপ্লিকেশনকে নিরাপদ রাখতে সাহায্য করে:
X-XSS-Protection: XSS আক্রমণ থেকে রক্ষা করার জন্য (ডিফল্টভাবে এটি enabled থাকে)।Strict-Transport-Security: HTTPS প্রটোকল ব্যবহার নিশ্চিত করতে।no-sniff: MIME type sniffing প্রতিরোধ করতে।expect-ct: HTTPS কনটেন্ট সংক্রান্ত পলিসি সুনির্দিষ্ট করতে।
সারাংশ
KoaJS-এ Helmet.js ব্যবহার করা একটি সহজ এবং কার্যকর উপায় আপনার অ্যাপ্লিকেশনকে বিভিন্ন নিরাপত্তা আক্রমণ থেকে রক্ষা করার জন্য। এটি HTTP হেডারের মাধ্যমে নিরাপত্তা পলিসি প্রয়োগ করে এবং আপনাকে বিভিন্ন নিরাপত্তা ব্যবস্থা কনফিগার করতে সহায়ক হয়। Helmet.js এর বিভিন্ন অপশন দিয়ে আপনি নিজের KoaJS অ্যাপ্লিকেশনটির নিরাপত্তা নিশ্চিত করতে পারবেন এবং ব্যবহারকারীদের জন্য সুরক্ষিত পরিবেশ তৈরি করতে পারবেন।
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