如何确保Stripe webhooks的安全性?

sam*_*ikh 5 php webhooks stripe-payments

我将创建Stripe Web挂钩,并想知道如何确保安全性,只有Stripe可以访问我的URL?

我正在使用Laravel和Stripe库.

dec*_*eze 14

如文档中所述:

如果担心安全问题,或者确认Stripe发送webhook很重要,您应该只使用webhook中发送的ID,并应直接从Stripe API请求剩余的详细信息.我们还建议您通过记录您收到的事件来防止重放攻击,并且绝不会两次处理事件.

换句话说,无法确认请求的来源.因此,除了任何给定项目的ID之外,不要信任它的任何数据.然后,您自己联系Stripe API,询问具有给定ID的项目.通过这种方式,您可以知道从何处获取数据,并且webhook调用基本上只会成为通知,通知您应该使用API​​进行检查.


小智 5

实际上,您可以将对 Webhook 的访问限制为仅 Stripe IP。这就是为什么 Stripe 更新了 webhooks ip 列表。

https://stripe.com/docs/ips

我刚刚为一个使用 Laravel 和 Stripe 的项目做了这个。你可以这样做:

//Only accept connections from stripe ips.


    //Save stripe info for 24 hours for performance.
    $stripe_webhooks_ips = Cache::remember('stripe_webhooks_ips', 1440, function()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, 'https://stripe.com/files/ips/ips_webhooks.json');
        $result = curl_exec($ch);
        curl_close($ch);

        $json_result = json_decode($result,true);

        return $json_result['WEBHOOKS'];
    });



    if(in_array($_SERVER['REMOTE_ADDR'],$stripe_webhooks_ips)) {
        //Your Code Here.
    }
Run Code Online (Sandbox Code Playgroud)

关于remote_addr变量的安全性: 信任$_SERVER['REMOTE_ADDR']是否安全?

如果您使用代理或 Cloudfare 等 CDN 服务,请记住采取额外措施来获取原始 IP。