Я буду создавать веб-хуки Stripe и хочу знать, как обеспечить безопасность, чтобы только Stripe мог получить доступ к моему URL?
Я использую Laravel с библиотекой Stripe.
Как отмечено в документация:
Если вас беспокоит безопасность или важно подтвердить, что Stripe отправил веб-крючок, вы должны использовать только тот идентификатор, который был отправлен в ваш веб-крючок, и запрашивать оставшуюся информацию непосредственно у API Stripe. Мы также советуем вам защититься от повторных атак, записывая, какие события вы получаете, и никогда не обрабатывая события дважды.
Другими словами, нет способа подтвердить, откуда поступил запрос. Таким образом, не доверяйте никаким его данным, кроме идентификатора любого данного элемента. Затем вы сами связываетесь с API Stripe, запрашивая элемент с указанным идентификатором. Таким образом, вы узнаете, откуда вы берете свои данные, и вызов webhook, по сути, просто становится уведомлением, сообщающим вам, что вы должны зарегистрироваться с помощью API.
На самом деле вы можете ограничить доступ к своим веб-зацепкам только для IP-адресов Stripe. Вот почему Stripe обновил список 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.
}
О безопасности переменной remote_addr:
Безопасно ли доверять $ _SERVER [‘REMOTE_ADDR’]?
Не забудьте принять дополнительные меры для получения исходного IP-адреса, если вы находитесь за прокси-сервером или услугой CDN, такой как Cloudfare и т. Д.