Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确保条带webhook的安全性?_Php_Stripe Payments_Webhooks - Fatal编程技术网

Php 如何确保条带webhook的安全性?

Php 如何确保条带webhook的安全性?,php,stripe-payments,webhooks,Php,Stripe Payments,Webhooks,我将创建Stripe web钩子,并想知道如何确保安全性,以便只有Stripe可以访问我的URL 我正在将Laravel与Stripe库一起使用。如中所述: 如果安全性是一个问题,或者如果确认Stripe发送了webhook很重要,那么您应该只使用webhook中发送的ID,并且应该直接从Stripe API请求剩余的详细信息。我们还建议您通过记录您接收到的事件来防止重播攻击,并且不要两次处理事件 换句话说,无法确认请求来自何处。因此,除了任何给定项的id之外,不要信任它的任何数据。然后,您自己

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

我正在将Laravel与Stripe库一起使用。

如中所述:

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


换句话说,无法确认请求来自何处。因此,除了任何给定项的id之外,不要信任它的任何数据。然后,您自己联系条带API,请求具有给定id的项。这样,您就知道数据来自何处,webhook调用实际上只是一个通知,让您知道应该使用API进行签入。

实际上,您可以将对webhook的访问限制为条带IP。这就是为什么Stripe会更新webhooks IP列表的原因

我只是为一个使用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.
    }
关于远程_addr变量的安全性:


请记住,如果您使用的是代理或CDN服务(如Cloudfare等),请采取额外措施获取原始ip。

条带对发送给您的事件进行签名,以便您可以验证签名以检查条带是否是发送者

条带库将为您处理此问题,包括防止重播攻击。请参阅上的文档。这里有一个PHP示例


幂等性是一个独立的问题。您可以多次接收事件,这是您要处理的问题(通过跟踪事件ID)。这在本页中提到:。

您没有代币吗。。。?