Stripe Webhook署名検証: 見落としがちなセキュリティ対策
## Webhookの危険性
Stripe Webhookのエンドポイントは誰でもPOSTできる。署名検証なしだと:
- 偽の支払い完了通知で商品を騙し取られる
- 偽の返金通知でデータ不整合
## 署名検証の実装
```php
$payload = file_get_contents("php://input");
$sigHeader = $_SERVER["HTTP_STRIPE_SIGNATURE"] ?? "";
try {
$event = StripeWebhook::constructEvent(
$payload, $sigHeader, STRIPE_WEBHOOK_SECRET
);
} catch (Exception $e) {
http_response_code(400);
exit;
}
// $event->type で分岐
switch ($event->type) {
case "checkout.session.completed":
handleCheckoutComplete($event->data->object);
break;
}
```
## よくある間違い
1. `php://input` ではなく `$_POST` を使う → 署名が合わない
2. Webhook secretをハードコード → .envに移動
3. エラー時に詳細を返す → 攻撃者にヒントを与える
No comments yet. Be the first to share your thoughts.