Stripe Payments & SaaS Billing Systems · Урок

Безопасная проверка подписей веб-перехватчиков

Защитите платёжную часть сервера от поддельных событий, проверяя подписи веб-перехватчиков Stripe и соблюдая безопасные практики для конечных точек.

Урок 4 из 413 шагов

«Безопасная проверка подписей веб-перехватчиков» — бесплатный урок Stripe Payments & SaaS Billing Systems на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Stripe Payments & SaaS Billing Systems, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Stripe Payments & SaaS Billing Systems содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Why Verify Webhooks?

Your webhook endpoint is public. Without verification, an attacker could POST a fake payment_succeeded event and unlock paid features for free.

The Signing Secret

Each webhook endpoint has a signing secret (starts with whsec_). Stripe uses it to sign every event it sends you.

The Stripe-Signature Header

Every webhook request carries a Stripe-Signature header containing a timestamp and an HMAC signature of the payload.

// Stripe-Signature: t=1700000000,v1=5257a8...

Use the Raw Body

Signature verification needs the exact raw request body. If a framework parses JSON first, the bytes change and verification fails.

app.post('/webhook',
  express.raw({ type: 'application/json' }),
  handler
);

Verifying with the SDK

The Stripe SDK does the HMAC math for you via constructEvent.

function verify(rawBody, sig, secret, stripe) {
  return stripe.webhooks.constructEvent(rawBody, sig, secret);
}

Handling Verification Failure

If verification throws, reject the request with a 400. Never process an unverified event.

function process(ok) {
  if (!ok) return { status: 400, body: 'invalid signature' };
  return { status: 200, body: 'received' };
}
console.log(process(false));

Timestamp Tolerance

The signature includes a timestamp. Stripe rejects events older than a tolerance window to block replay attacks with captured payloads.

Constant-Time Comparison

Under the hood, signatures are compared in constant time to avoid timing attacks. The SDK handles this; never hand-roll a simple equality check.

Respond Fast, Process Later

Acknowledge with 200 quickly, then do heavy work asynchronously. Slow responses make Stripe retry and can cause duplicates.

Keep the Secret Safe

Store the signing secret in environment variables, never in source control. Rotate it if it leaks, using the dashboard.

const secret = process.env.STRIPE_WEBHOOK_SECRET;
console.log(Boolean(secret));

Per-Endpoint Secrets

Each registered endpoint has its own secret. Use the correct one for the URL receiving the event, especially across test and live modes.

Quick Check

Why must you use the raw request body for verification?

Recap

You secured your webhook endpoint:

  • Verify the Stripe-Signature with the signing secret
  • Use the raw body and the SDK constructEvent
  • Reject failures and rely on timestamp tolerance against replays
  • Keep secrets in env vars and respond fast
Можно начать бесплатно

Изучай Stripe Payments & SaaS Billing Systems с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
12
Уроки
48

Часто задаваемые вопросы

Урок «Безопасная проверка подписей веб-перехватчиков» бесплатный?

Да — полный текст урока «Безопасная проверка подписей веб-перехватчиков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Stripe Payments & SaaS Billing Systems, подпишись на CoddyKit PRO. Курс Stripe Payments & SaaS Billing Systems содержит 4 уроков всего.

Чему я научусь в уроке «Безопасная проверка подписей веб-перехватчиков»?

Защитите платёжную часть сервера от поддельных событий, проверяя подписи веб-перехватчиков Stripe и соблюдая безопасные практики для конечных точек. Ты практикуешь Stripe Payments & SaaS Billing Systems с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Stripe Payments & SaaS Billing Systems?

Предыдущий опыт не требуется. Stripe Payments & SaaS Billing Systems на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Безопасная проверка подписей веб-перехватчиков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Stripe Payments & SaaS Billing Systems?

Да. Каждый урок Stripe Payments & SaaS Billing Systems включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Безопасное хранение способов оплаты (токены)
  2. Внедрение строгой аутентификации клиентов (SCA)
  3. Лучшие практики соответствия PCI для разработчиков
  4. Безопасная проверка подписей веб-перехватчиков
← Назад к Stripe Payments & SaaS Billing Systems