CORS কি?
Cross-Origin Resource Sharing (CORS) একটি নিরাপত্তা বৈশিষ্ট্য যা ওয়েব ব্রাউজারগুলোতে একটি ডোমেইন থেকে অন্য ডোমেইনে HTTP অনুরোধের অনুমতি দেয়। সাধারণত, ওয়েব ব্রাউজারগুলো এক ডোমেইনের অ্যাপ্লিকেশন থেকে অন্য ডোমেইনে অনুরোধ করার অনুমতি দেয় না, কিন্তু CORS এর মাধ্যমে নির্দিষ্ট শর্তে এক ডোমেইন থেকে অন্য ডোমেইনে রিসোর্স শেয়ার করা সম্ভব হয়।
CORS যখন সঠিকভাবে কনফিগার করা হয়, তখন এটি একটি নিরাপদ উপায়ে এক ডোমেইন থেকে অন্য ডোমেইনে রিসোর্স শেয়ার করতে দেয়, যেমন API রিকোয়েস্ট করতে বা ডেটা শেয়ার করতে। CORS মূলত HTTP Headers ব্যবহার করে কাজ করে, যেখানে একটি সার্ভার নির্ধারণ করে কোন অরিজিন থেকে অনুরোধ গ্রহণ করা যাবে।
CORS কনফিগারেশন কীভাবে কাজ করে?
CORS কনফিগারেশনে সার্ভারের পক্ষ থেকে Access-Control-Allow-Origin হেডার ব্যবহৃত হয়। এটি নির্ধারণ করে কোন অরিজিন (ডোমেইন) থেকে রিকোয়েস্ট গ্রহণ করা হবে। যদি CORS কনফিগারেশন সঠিকভাবে করা না হয়, তবে ব্রাউজার অরিজিন থেকে রিকোয়েস্ট ব্লক করে দেয়।
Access-Control-Allow-Origin হেডারটি একটি নির্দিষ্ট ডোমেইন অথবা * (বিশ্ববিদ্যালয় অ্যাক্সেস) প্রদান করতে পারে। উদাহরণস্বরূপ:
Access-Control-Allow-Origin: *– কোনো নির্দিষ্ট ডোমেইন ছাড়াই সমস্ত ডোমেইন থেকে অনুরোধ গ্রহণ করা যাবে।Access-Control-Allow-Origin: https://example.com– শুধুমাত্রhttps://example.comথেকে রিকোয়েস্ট গ্রহণ করা হবে।
এছাড়াও অন্যান্য হেডার যেমন Access-Control-Allow-Methods, Access-Control-Allow-Headers ইত্যাদি ব্যবহার করা হয় যাতে কনফিগারেশনের আরও নিয়ন্ত্রণ করা যায়।
CORS কনফিগারেশন করা
CORS কনফিগারেশন সাধারনত ওয়েব সার্ভারের সেটিংস বা API সার্ভারে করা হয়। নিচে Node.js এর মাধ্যমে Express.js অ্যাপ্লিকেশনে CORS কনফিগার করার উদাহরণ দেওয়া হলো।
১. Express.js এ CORS কনফিগারেশন
Express.js ব্যবহার করলে cors নামক মডিউল ব্যবহার করে CORS কনফিগারেশন করা যায়।
ইনস্টলেশন:
npm install cors
Express অ্যাপ্লিকেশনে CORS কনফিগারেশন:
const express = require('express');
const cors = require('cors');
const app = express();
// CORS কনফিগারেশন
app.use(cors({
origin: 'https://example.com', // শুধুমাত্র https://example.com থেকে রিকোয়েস্ট অনুমোদিত
methods: ['GET', 'POST'], // GET এবং POST মেথড অনুমোদিত
allowedHeaders: ['Content-Type'], // Content-Type হেডার অনুমোদিত
}));
app.get('/api', (req, res) => {
res.json({ message: 'CORS Enabled' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
এখানে, cors() মেথডকে কনফিগার করে CORS পলিসি নির্ধারণ করা হয়েছে। আপনি যদি সব অরিজিন থেকে রিকোয়েস্ট গ্রহণ করতে চান, তবে origin: '*' ব্যবহার করতে পারেন।
২. NestJS এ CORS কনফিগারেশন
NestJS-এ CORS কনফিগারেশন খুবই সহজ। আপনি main.ts ফাইলে NestJS অ্যাপ্লিকেশন চালানোর সময় CORS কনফিগারেশন করতে পারেন।
NestJS CORS কনফিগারেশন:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors({
origin: 'https://example.com', // শুধুমাত্র https://example.com থেকে রিকোয়েস্ট অনুমোদিত
methods: ['GET', 'POST'], // GET এবং POST মেথড অনুমোদিত
allowedHeaders: ['Content-Type'], // Content-Type হেডার অনুমোদিত
});
await app.listen(3000);
}
bootstrap();
এখানে, app.enableCors() মেথডটি ব্যবহার করে CORS কনফিগারেশন করা হয়েছে।
৩. Spring Boot এ CORS কনফিগারেশন
Spring Boot এ CORS কনফিগারেশন খুবই সহজ। আপনাকে @CrossOrigin অ্যানোটেশন ব্যবহার করতে হবে বা গ্লোবাল কনফিগারেশন করতে হবে।
Spring Boot CORS কনফিগারেশন:
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin(origins = "https://example.com") // শুধুমাত্র https://example.com থেকে রিকোয়েস্ট অনুমোদিত
public class MyController {
@GetMapping("/api")
public String getData() {
return "CORS Enabled in Spring Boot";
}
}
এখানে, @CrossOrigin অ্যানোটেশন ব্যবহার করে আপনি কনফিগারেশন করতে পারেন।
CORS এর অন্যান্য হেডারস
CORS কনফিগারেশনে বেশ কিছু অতিরিক্ত হেডারসও ব্যবহার করা হয়। এগুলি রিকোয়েস্টের ধরন এবং প্রয়োজনীয়তার উপর নির্ভর করে নির্ধারণ করা হয়:
- Access-Control-Allow-Methods: এটি ক্লায়েন্টকে জানায় কোন HTTP মেথড অনুমোদিত (যেমন GET, POST, PUT, DELETE)।
- Access-Control-Allow-Headers: এটি ক্লায়েন্টকে জানায় কোন হেডারস অনুমোদিত।
- Access-Control-Allow-Credentials: এটি
trueকরলে, কুকি এবং অথেনটিকেশন তথ্য পাঠানোর অনুমতি দেয়। - Access-Control-Expose-Headers: এটি ক্লায়েন্টকে জানায় কোন হেডারসকে এক্সপোজ (access) করা যাবে।
- Access-Control-Max-Age: এটি একটি ক্যাশিং হেডার, যা CORS পলিসি কত সময়ের জন্য ক্যাশ করা হবে তা নির্ধারণ করে।
CORS এবং নিরাপত্তা
CORS এর মাধ্যমে ডেটা শেয়ারিংয়ের সুবিধা হলেও এটি সঠিকভাবে কনফিগার করা না হলে নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে। Access-Control-Allow-Origin: '*' ব্যবহারের মাধ্যমে আপনি সমস্ত অরিজিন থেকে রিকোয়েস্ট গ্রহণ করতে পারেন, তবে এটি নিরাপত্তা বিপদ ডেকে আনতে পারে যদি আপনি নিরাপদ ডোমেইনগুলো থেকে রিকোয়েস্ট গ্রহণ না করেন।
সেই কারণে CORS কনফিগারেশনের সময় আপনি অবশ্যই:
- কেবলমাত্র নিরাপদ ডোমেইনগুলির অনুমতি দিন।
- API কে authentication এবং authorization এর মাধ্যমে সুরক্ষিত করুন।
- শুধুমাত্র প্রয়োজনীয় HTTP মেথডগুলো অনুমোদিত করুন।
সারাংশ
CORS (Cross-Origin Resource Sharing) হল একটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য যা ব্রাউজারগুলোর মাধ্যমে একটি ডোমেইন থেকে অন্য ডোমেইনে রিসোর্স শেয়ার করার অনুমতি দেয়। CORS কনফিগারেশন সঠিকভাবে করলে ওয়েব অ্যাপ্লিকেশনটির নিরাপত্তা এবং ফাংশনালিটি ঠিকভাবে বজায় থাকে। CORS কনফিগারেশন সহজভাবে Express.js, NestJS, এবং Spring Boot-এর মতো জনপ্রিয় ফ্রেমওয়ার্কে করা যায়।
Read more