ওয়েবহুকস ব্যাখ্যা: সাইনড পেলোড এবং রিট্রাই লজিক

Backend2026-10-28TryQuickToolBox

আপনি একটি API তৈরি করেছেন এবং এখন ইভেন্ট ঘটলে অন্য সার্ভিসগুলোকে জানাতে চান। পোলিং অদক্ষ, তাই আপনি ওয়েবহুকসের দিকে ঝুঁকছেন। কিন্তু শীঘ্রই আবিষ্কার করবেন যে ওয়েবহুকস ব্যর্থ হতে পারে, জালিয়াতি হতে পারে বা ডুপ্লিকেট প্রসেসিং ঘটাতে পারে। এই নিবন্ধে ব্যাখ্যা করা হয়েছে কীভাবে সাইনড পেলোড দিয়ে ওয়েবহুকস সুরক্ষিত করবেন এবং শক্তিশালী রিট্রাই লজিক প্রয়োগ করবেন।

ওয়েবহুকস কী?

ওয়েবহুকস হলো ব্যবহারকারী-সংজ্ঞায়িত HTTP কলব্যাক। আপনার সিস্টেমে যখন কোনো ইভেন্ট ঘটে (যেমন, একটি পেমেন্ট সফল হয়), আপনি সাবস্ক্রাইবারের দেওয়া একটি URL-এ HTTP POST রিকোয়েস্ট পাঠান। পেলোড সাধারণত JSON বা ফর্ম ফরম্যাটে ইভেন্ট ডেটা ধারণ করে।

ওয়েবহুকস ক্রমাগত পোলিং ছাড়াই সার্ভিসগুলোর মধ্যে রিয়েল-টাইম যোগাযোগ সক্ষম করে। এগুলো পেমেন্ট গেটওয়ে, CI/CD টুল এবং SaaS প্ল্যাটফর্মগুলোতে ব্যাপকভাবে ব্যবহৃত হয়।

কেন ওয়েবহুকস সুরক্ষিত করবেন?

নিরাপত্তা ছাড়া, যে কেউ ওয়েবহুক URL জানে সে জাল রিকোয়েস্ট পাঠাতে পারে, যার ফলে ডেটা বিকৃতি বা জালিয়াতি হতে পারে। এছাড়াও, আক্রমণকারীরা পুরনো রিকোয়েস্ট পুনরায় পাঠাতে পারে। একটি শেয়ার্ড সিক্রেট দিয়ে পেলোড সাইন করা সত্যতা এবং অখণ্ডতা নিশ্চিত করে।

HMAC দিয়ে পেলোড সাইন করা

HMAC (হ্যাশ-ভিত্তিক মেসেজ অথেনটিকেশন কোড) ওয়েবহুকস সাইন করার একটি সাধারণ পদ্ধতি। প্রেরক এবং প্রাপক একটি গোপন কী শেয়ার করেন। প্রেরক সিক্রেট ব্যবহার করে পেলোডের HMAC গণনা করেন এবং একটি হেডারে (যেমন X-Signature) তা অন্তর্ভুক্ত করেন। প্রাপক HMAC পুনরায় গণনা করেন এবং তুলনা করেন।

ধাপে ধাপে: একটি সাইনড ওয়েবহুক পাঠানো

  1. পেলোড (JSON) তৈরি করুন।
  2. সিক্রেট ব্যবহার করে পেলোডের HMAC-SHA256 গণনা করুন।
  3. হেক্স ডাইজেস্টটি একটি হেডারে অন্তর্ভুক্ত করুন, যেমন X-Signature: sha256=...।
  4. POST রিকোয়েস্ট পাঠান।
// Node.js উদাহরণ, crypto ব্যবহার করে
const crypto = require('crypto');
const secret = 'your_shared_secret';
const payload = JSON.stringify({ event: 'payment.success', amount: 100 });
const signature = crypto.createHmac('sha256', secret).update(payload).digest('hex');
// হেডার X-Signature: sha256=signature সহ POST পাঠান

সিগনেচার যাচাই করা

প্রাপকের দিকে, সিগনেচার হেডারটি বের করুন, কাঁচা রিকোয়েস্ট বডির HMAC গণনা করুন এবং টাইমিং আক্রমণ প্রতিরোধে ধ্রুবক-সময়ের তুলনা ব্যবহার করে তুলনা করুন।

// Express.js উদাহরণ
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-signature'];
  const computed = crypto.createHmac('sha256', secret).update(req.rawBody).digest('hex');
  if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(computed))) {
    return res.status(401).send('Invalid signature');
  }
  // পেলোড প্রসেস করুন
  res.status(200).send('OK');
});

দ্রষ্টব্য: নিশ্চিত করুন যে আপনি কাঁচা বডি ব্যবহার করছেন, পার্স করা JSON নয়, কারণ পার্সিং পেলোড পরিবর্তন করতে পারে।

রিপ্লে আক্রমণ প্রতিরোধ

সাইনড পেলোডে একটি টাইমস্ট্যাম্প অন্তর্ভুক্ত করুন এবং কয়েক মিনিটের চেয়ে পুরনো রিকোয়েস্ট প্রত্যাখ্যান করুন। এছাড়াও, একটি অনন্য ইভেন্ট আইডি অন্তর্ভুক্ত করুন এবং ডুপ্লিকেট এড়াতে প্রসেস করা আইডিগুলো সংরক্ষণ করুন।

নির্ভরযোগ্য ডেলিভারির জন্য রিট্রাই লজিক

ওয়েবহুক এন্ডপয়েন্ট ডাউন বা ধীর হতে পারে। এক্সপোনেনশিয়াল ব্যাকঅফ এবং জিটার সহ রিট্রাই প্রয়োগ করুন। সর্বোচ্চ রিট্রাই সংখ্যা (যেমন 5) এবং প্রতিটি রিকোয়েস্টের জন্য একটি টাইমআউট সেট করুন।

রিট্রাই কৌশল

উদাহরণ রিট্রাই সময়সূচি: ১ম রিট্রাই ৫ সেকেন্ড পরে, ২য় ৩০ সেকেন্ড পরে, ৩য় ২ মিনিট পরে, ৪র্থ ১০ মিনিট পরে, ৫ম ১ ঘন্টা পরে।

ব্যর্থতা সামলানো

যদি সমস্ত রিট্রাই ব্যর্থ হয়, ব্যর্থতা লগ করুন এবং সাবস্ক্রাইবারকে অবহিত করুন (যেমন ইমেইল বা ড্যাশবোর্ডের মাধ্যমে)। ম্যানুয়ালি ওয়েবহুক পুনরায় পাঠানোর একটি উপায় প্রদান করুন।

তুলনা: সাইনড পেলোড বনাম বেসিক অথ

পদ্ধতি নিরাপত্তা জটিলতা রিপ্লে সুরক্ষা
HMAC সাইনড পেলোড উচ্চ মাঝারি হ্যাঁ (টাইমস্ট্যাম্প সহ)
বেসিক অথ নিম্ন নিম্ন না
হেডারে API কী মাঝারি নিম্ন না

সেরা অনুশীলন

সাধারণ জিজ্ঞাসা

কীভাবে একটি ওয়েবহুক সিগনেচার যাচাই করব?

আপনার সিক্রেট ব্যবহার করে কাঁচা রিকোয়েস্ট বডির HMAC গণনা করুন এবং ধ্রুবক-সময়ের তুলনা ব্যবহার করে সিগনেচার হেডারের সাথে তুলনা করুন।

যদি একটি ওয়েবহুক ব্যর্থ হয় তবে আমার কী করা উচিত?

এক্সপোনেনশিয়াল ব্যাকঅফ এবং জিটার সহ রিট্রাই প্রয়োগ করুন। যদি সমস্ত রিট্রাই ব্যর্থ হয়, ব্যর্থতা লগ করুন এবং ম্যানুয়াল পুনরায় পাঠানোর বিকল্প প্রদান করুন।

সাইনিং ছাড়া কি ওয়েবহুক ব্যবহার করতে পারি?

এটি সুপারিশ করা হয় না। সাইনিং ছাড়া, আপনি প্রেরক যাচাই করতে পারবেন না, যা আপনার সিস্টেমকে স্পুফিং এবং রিপ্লে আক্রমণের জন্য ঝুঁকিপূর্ণ করে তোলে।

ওয়েবহুক পেলোড পরীক্ষা করার সময়, আপনার JSON প্রতিক্রিয়া পরিদর্শন করার প্রয়োজন হতে পারে। দ্রুত JSON ডেটা সুন্দরভাবে প্রিন্ট এবং যাচাই করতে আমাদের JSON ফরম্যাটার ব্যবহার করুন।