Cross-Origin Resource Sharing (CORS) এর সাথে WebSockets

Cross-Origin Web Sockets - ওয়েব সকেট (Web Sockets) - Web Development

224

Cross-Origin Resource Sharing (CORS) একটি নিরাপত্তা বৈশিষ্ট্য যা মূলত HTTP রিকোয়েস্টের জন্য ব্যবহৃত হয়, কিন্তু এটি Web Sockets এর ক্ষেত্রেও প্রযোজ্য। CORS মূলত ব্রাউজারকে একটি সাইট থেকে অন্য সাইটে রিসোর্স অ্যাক্সেসের অনুমতি দিতে বা আটকাতে ব্যবহৃত হয়। যেখানে HTTP রিকোয়েস্টে CORS হেডারগুলি সহজেই চেক করা হয়, Web Sockets এর ক্ষেত্রে CORS এর কাজ কিছুটা আলাদা এবং নীতিগতভাবে Web Socket কানেকশনগুলি প্রাথমিকভাবে CORS-এর মতো হেডার চেক করে না।

তবে, Web Sockets ব্যবহারে Cross-Origin সমস্যাগুলি সমাধান করতে কিছু কনফিগারেশন এবং নিরাপত্তা ব্যবস্থা প্রয়োজন। এই টিউটোরিয়ালে, আমরা CORS এবং Web Sockets এর সম্পর্ক, তাদের নিরাপত্তা বৈশিষ্ট্য এবং কিভাবে CORS সমস্যাগুলি মোকাবিলা করা যায় তা আলোচনা করব।


১. CORS এবং Web Sockets

CORS (Cross-Origin Resource Sharing) মূলত ওয়েব ব্রাউজারের নিরাপত্তা ফিচার যা ক্রস-ডোমেইন রিকোয়েস্টকে নিয়ন্ত্রণ করে। যখন একটি ওয়েব পেজ এক ডোমেইন থেকে অন্য ডোমেইনে রিকোয়েস্ট পাঠায়, তখন ব্রাউজার এই রিকোয়েস্টকে নিরাপদ করতে CORS নীতির মাধ্যমে যাচাই করে।

যদিও Web Sockets HTTP প্রোটোকলের মাধ্যমে কানেক্ট হয়, তবে এটি TCP ভিত্তিক একটি প্রটোকল এবং সরাসরি CORS নীতির আওতায় পড়ে না। তবে, ব্রাউজার Web Socket কানেকশন তৈরির সময় একটি Origin হেডার পাঠায়, যা সঠিকভাবে যাচাই করা দরকার।

১.১ Web Sockets এবং CORS: প্রকৃত অবস্থান

ব্রাউজার যখন একটি Web Socket কানেকশন তৈরি করে, তখন এটি প্রাথমিকভাবে একটি HTTP হ্যান্ডশেক (এটি একটি HTTP রিকোয়েস্ট) তৈরি করে। এই রিকোয়েস্টের মধ্যে Origin হেডার থাকে, যা ক্লায়েন্টের ডোমেইন সম্পর্কে সার্ভারকে জানায়। উদাহরণস্বরূপ:

  • Origin: https://example.com

এটি Web Socket কানেকশনের জন্য নির্দিষ্ট ডোমেইনকে অনুমতি দেবে। কিন্তু এখানে CORS নীতি HTTP রিকোয়েস্টের মতো কঠোরভাবে প্রয়োগ হয় না। তার মানে হল যে Web Socket কানেকশনটি শুধু ক্লায়েন্টের Origin হেডার পরীক্ষা করে এবং সার্ভার সেই হেডার মেনে কানেকশন অনুমোদন বা অস্বীকার করতে পারে।


২. CORS হেডার এবং Web Socket কানেকশন

যখন একটি ব্রাউজার Web Socket কানেকশন তৈরির জন্য একটি HTTP হ্যান্ডশেক পাঠায়, তখন এটি Origin হেডার পাঠায়। উদাহরণস্বরূপ:

  • Origin: https://example1.com

এখানে Origin হেডারটি ব্যবহার করা হয়, যা সার্ভারকে জানিয়ে দেয় কোন ডোমেইন থেকে রিকোয়েস্ট আসছে। এই হেডারটি সার্ভারের পক্ষ থেকে চেক করা হয় এবং কেবলমাত্র নির্দিষ্ট ডোমেইনগুলোকে অনুমতি দেওয়া হয় Web Socket কানেকশন স্থাপনের জন্য।

২.১ CORS হেডার চেক করা

Web Socket কানেকশনে CORS হেডার চেক করার জন্য সার্ভারে কিছু নির্দিষ্ট কনফিগারেশন প্রয়োজন। উদাহরণস্বরূপ, যদি আপনি Node.js এবং ws লাইব্রেরি ব্যবহার করেন, তবে CORS কনফিগারেশন করতে হবে:

const WebSocket = require('ws');
const wss = new WebSocket.Server({
  port: 8080,
  handleProtocols: (protocols, request) => {
    // Origin হেডার চেক করা
    const origin = request.headers.origin;
    if (origin === 'https://example1.com') {
      return true; // Origin মেলে, কানেকশন অনুমোদিত
    } else {
      return false; // Origin মেলে না, কানেকশন অস্বীকার
    }
  }
});

wss.on('connection', function connection(ws) {
  console.log('Client connected');
  ws.send('Hello Client!');
});

এখানে, handleProtocols মেথডের মাধ্যমে Origin হেডার যাচাই করা হচ্ছে। যদি এটি অনুমোদিত ডোমেইনের সাথে মেলে, তাহলে কানেকশন গ্রহণ করা হবে।


৩. CORS সমস্যা এবং Web Socket এর জন্য নিরাপত্তা

Web Sockets এর ক্ষেত্রে CORS-এর কিছু নির্দিষ্ট সমস্যা হতে পারে। কারণ যখন Web Socket কানেকশন স্থাপিত হয়, তখন এটি একটি TCP কানেকশন হিসেবে তৈরি হয়, যার ফলে ঐ সময় CORS হেডারগুলির সাথে কোনো নির্দিষ্ট নিয়ন্ত্রণ ব্যবস্থা থাকে না। তবে, সার্ভার সাইডে নিরাপত্তা ব্যবস্থা ও কনফিগারেশন নিশ্চিত করে Cross-Origin সমস্যাগুলি সহজেই সমাধান করা যায়।

৩.১ Cross-Origin Web Socket ত্রুটি

যদি Web Socket সার্ভার ক্লায়েন্টের Origin হেডার গ্রহণ না করে বা একটি ভুল Origin থাকে, তাহলে ব্রাউজার বা সার্ভার এই কানেকশনকে ব্লক করে। এর ফলে একটি CORS ত্রুটি দেখা দিতে পারে। উদাহরণস্বরূপ:

  • Error: Origin 'https://example1.com' is not allowed by Access-Control-Allow-Origin

৩.২ Web Socket সার্ভার সাইড কনফিগারেশন

Web Socket সার্ভারের CORS কনফিগারেশন যথাযথভাবে করা প্রয়োজন যাতে অনুমোদিত Origin থেকে Web Socket কানেকশন করা যায়। উদাহরণস্বরূপ, সার্ভারে Origin হেডার চেক করতে পারেন এবং অনুমোদিত ডোমেইনগুলি কোডে ম্যানুয়ালি নির্ধারণ করতে পারেন।


৪. নিরাপত্তার জন্য HTTPS এবং WSS

যেহেতু Web Sockets-এর উপর নির্ভরশীল সুরক্ষা ব্যবস্থা মূলত Origin চেকের মাধ্যমে করা হয়, তাই এটি আরও সুরক্ষিত করতে wss:// (WebSocket over HTTPS) ব্যবহার করা উচিত। এতে ডেটা এনক্রিপ্ট করা হবে এবং নিরাপত্তার ঝুঁকি কমে যাবে।

const WebSocket = require('ws');
const https = require('https');
const fs = require('fs');

const server = https.createServer({
  key: fs.readFileSync('private-key.pem'),
  cert: fs.readFileSync('certificate.pem')
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  console.log('Secure WebSocket connection established');
});

server.listen(8080);

এখানে wss:// প্রোটোকল ব্যবহার করা হয়েছে যা TLS/SSL এনক্রিপশন ব্যবহার করে নিরাপদ কানেকশন প্রদান করে। এটি সুরক্ষা নিশ্চিত করতে সাহায্য করে।


৫. সার্ভার সাইডে CORS কনফিগারেশন

Web Socket সার্ভার CORS হেডার ব্যবহার করে নিরাপত্তা নিশ্চিত করতে পারে। যদি Web Socket সার্ভারটি ক্লায়েন্টের Origin হেডার চেক না করে, তবে এটি কোনও সংক্রমণের ঝুঁকি সৃষ্টি করতে পারে। সুতরাং, CORS সঠিকভাবে কনফিগার করা জরুরি।


সারাংশ

Web Sockets এর ক্ষেত্রে CORS সমস্যাগুলির মোকাবিলায়, সার্ভারে Origin হেডার যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। CORS হেডারগুলির মাধ্যমে সার্ভার কোন ডোমেইন থেকে কানেকশন গ্রহণ করবে তা নির্ধারণ করা যায়। Web Socket কানেকশনের জন্য নিরাপত্তা নিশ্চিত করতে wss:// (WebSocket over HTTPS) ব্যবহার করা উচিত। সঠিক কনফিগারেশন এবং নিরাপত্তা ব্যবস্থা প্রয়োগ করে, Cross-Origin Web Socket কানেকশন নিরাপদ এবং কার্যকর করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...