CORS (Cross-Origin Resource Sharing) এবং WebSocket সিকিউরেশন দুটি গুরুত্বপূর্ণ ধারণা, যা WebSocket এর নিরাপত্তা এবং ক্রস-ওরিজিন রিকোয়েস্টের নিরাপত্তা ব্যবস্থাকে নিশ্চিত করে। WebSocket প্রোটোকলের ক্ষেত্রে নিরাপত্তা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি পাবলিক বা ওপেন নেটওয়ার্কে কমিউনিকেশন পরিচালনা করছেন।
CORS (Cross-Origin Resource Sharing) এবং WebSocket
CORS হল একটি ব্রাউজার নিরাপত্তা বৈশিষ্ট্য যা এক ডোমেইনের ওয়েব অ্যাপ্লিকেশনকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করতে অনুমতি দেয়। এটি মূলত HTTP রিকোয়েস্টের সাথে সম্পর্কিত, তবে WebSockets এর ক্ষেত্রেও CORS নীতির কিছু সীমাবদ্ধতা থাকে।
CORS এবং WebSockets এর মধ্যে পার্থক্য
CORS HTTP প্রোটোকলের অংশ হলেও, WebSocket এর জন্য সাধারণ CORS নীতির কাজটি কিছুটা ভিন্ন। HTTP রিকোয়েস্টের ক্ষেত্রে, CORS হেডার যেমন Access-Control-Allow-Origin, WebSocket কানেকশনের ক্ষেত্রে সরাসরি প্রযোজ্য নয়। কিন্তু, WebSocket কানেকশন গঠনের সময়, ক্লায়েন্টের ব্রাউজার সার্ভারে সংযোগ প্রতিষ্ঠা করার আগে একটি Origin হেডার পাঠায়। সার্ভারটি যদি সেই Origin অনুমোদিত হয়, তবে WebSocket কানেকশনটি সফল হবে, অন্যথায় তা ব্যর্থ হবে।
WebSocket Origin চেক
WebSocket কানেকশনের সময়, ব্রাউজার একটি Origin হেডার পাঠায়, যা এই সার্ভারের সাথে কানেকশন প্রস্তাব করছে। সার্ভারটি তখন এই Origin হেডারের মান যাচাই করে, এবং যদি এটি অনুমোদিত ডোমেইন না হয়, তবে কানেকশন রিফিউজ (reject) করা হয়।
ক্লায়েন্ট সাইড উদাহরণ:
const socket = new WebSocket('ws://example.com/socket');
এই রিকোয়েস্টের মাধ্যমে, ব্রাউজার Origin হেডার পাঠাবে যা ক্লায়েন্টের বর্তমান ডোমেইন ধারণ করবে।
সার্ভার সাইড উদাহরণ (Node.js):
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080, verifyClient: (info, cb) => {
const allowedOrigins = ['http://trusted-domain.com', 'https://another-domain.com'];
if (allowedOrigins.includes(info.origin)) {
cb(true); // কানেকশন অনুমোদিত
} else {
cb(false); // কানেকশন প্রত্যাখ্যাত
}
}});
এখানে, verifyClient ফাংশনটি ক্লায়েন্টের Origin চেক করে এবং শুধুমাত্র অনুমোদিত ডোমেইন থেকে কানেকশন গ্রহণ করে।
WebSocket সিকিউরেশন
WebSocket এর সিকিউরিটি নিশ্চিত করা খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন এটি সুরক্ষিত (secure) সংযোগের মাধ্যমে ব্যবহৃত হয়। WebSocket এর জন্য নিরাপত্তার প্রধান বিষয়গুলো হল:
WSS (WebSocket Secure):
- WSS হল WebSocket এর সিকিউর সংস্করণ, যা TLS (Transport Layer Security) ব্যবহার করে ডেটা এনক্রিপ্ট করে। এটি HTTP এর HTTPS এর মতো কাজ করে, যেখানে সমস্ত ডেটা এনক্রিপ্টেড থাকে এবং মাঝখানে কোনো ম্যালওয়্যার বা হ্যাকার সহজে সেই ডেটা ইন্টারসেপ্ট করতে পারে না।
উদাহরণ:
const socket = new WebSocket('wss://example.com/socket');এখানে
wss://স্কিমা ব্যবহার করা হয়েছে যা নির্দেশ করে যে এটি একটি সিকিউর কানেকশন।- এনক্রিপশন:
- WebSocket সংযোগ সুরক্ষিত করতে, ডেটা এনক্রিপ্ট করা অত্যন্ত গুরুত্বপূর্ণ।
wss://প্রোটোকলের মাধ্যমে এই এনক্রিপশন প্রক্রিয়া স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। - এনক্রিপশন ক্লায়েন্ট এবং সার্ভারের মধ্যে আদান-প্রদান হওয়া ডেটাকে নিরাপদ রাখে, বিশেষ করে পাবলিক নেটওয়ার্কে।
- WebSocket সংযোগ সুরক্ষিত করতে, ডেটা এনক্রিপ্ট করা অত্যন্ত গুরুত্বপূর্ণ।
অথেনটিকেশন এবং অথোরাইজেশন:
- WebSocket কানেকশন স্থাপন করার আগে, ব্যবহারকারীকে অথেনটিকেট করা গুরুত্বপূর্ণ। এক্ষেত্রে, আপনি JWT (JSON Web Token) বা অন্য কোনো অথেনটিকেশন টোকেন ব্যবহার করতে পারেন, যাতে শুধুমাত্র বৈধ ব্যবহারকারীরা WebSocket সার্ভারে কানেক্ট হতে পারে।
উদাহরণ (JWT ব্যবহার):
const socket = new WebSocket('wss://example.com/socket?token=your-jwt-token');সার্ভার সাইডে, এই টোকেনটি যাচাই করতে হবে।
const WebSocket = require('ws'); const jwt = require('jsonwebtoken'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws, req) => { const token = req.url.split('token=')[1]; jwt.verify(token, 'your-secret-key', (err, decoded) => { if (err) { ws.close(); // অনির্বাচিত বা মিথ্যা টোকেন হলে কানেকশন বন্ধ } // বৈধ টোকেন হলে পরবর্তী প্রক্রিয়া }); });ডোজ (DoS) এবং ডিস্ট্রিবিউটেড ডোজ (DDoS) অ্যাটাকস:
- WebSocket সার্ভারগুলিতে অতিরিক্ত কানেকশন এবং অনিয়ন্ত্রিত রিকোয়েস্টে আক্রমণ হতে পারে। এর জন্য সার্ভার সাইডে কানেকশন রেট লিমিটিং বা কনকারেন্ট কানেকশন লিমিট সেট করা প্রয়োজন।
উদাহরণ (কানেকশন রেট লিমিট):
const MAX_CONNECTIONS = 100; let connectionCount = 0; wss.on('connection', (ws) => { connectionCount++; if (connectionCount > MAX_CONNECTIONS) { ws.close(); console.log('Connection rejected: Maximum connections reached'); } });- CORS এবং WebSocket নিরাপত্তা:
- WebSocket কানেকশন স্থাপনের সময় Origin হেডার যাচাই করা সিকিউরিটি বাড়ানোর জন্য একটি গুরুত্বপূর্ণ পদক্ষেপ। এটি নিশ্চিত করে যে শুধুমাত্র অনুমোদিত ডোমেইন থেকে কানেকশন স্থাপন করা হবে।
সারাংশ
CORS এবং WebSocket সিকিউরেশন দুটি গুরুত্বপূর্ণ উপাদান যা WebSocket এর নিরাপত্তা এবং ক্রস-ওরিজিন রিকোয়েস্টের নিয়ন্ত্রণ নিশ্চিত করে। CORS পদ্ধতি ব্যবহার করে WebSocket কানেকশনে অনুমোদিত ডোমেইন চেক করা হয়, এবং WebSocket সিকিউরেশন নিশ্চিত করতে WSS প্রোটোকল, এনক্রিপশন, অথেনটিকেশন এবং কানেকশন রেট লিমিটিং গুরুত্বপূর্ণ ভূমিকা পালন করে। WebSocket এর সুরক্ষিত ব্যবহার নিশ্চিত করতে এই সমস্ত ব্যবস্থা গুরুত্বপূর্ণ, বিশেষ করে যখন সংবেদনশীল বা বাস্তব-সময়ের তথ্য আদান-প্রদান করা হয়।
Read more