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