2015-02-03 3 views

Antwort

13

Wie bereits erwähnt in the documentation:

Wenn Sicherheit ein Anliegen ist, oder wenn es wichtig ist, dass Streifen den Webhook bestätigen gesendet, sollten Sie nur die ID in Ihrem Webhook und soll die restlichen Details zugesandt werden anfordern aus die Stripe API direkt. Wir empfehlen Ihnen auch, sich vor Replay-Angriffen zu schützen, indem Sie aufzeichnen, welche Ereignisse empfangen werden, und Ereignisse nie zweimal verarbeiten.

Mit anderen Worten, es gibt keine Möglichkeit zu bestätigen, wo eine Anfrage kam. Als solches, trauen Sie keinem seiner Daten, mit Ausnahme der ID eines bestimmten Artikels. Dann kontaktieren Sie die Stripe-API selbst und fragen nach dem Element mit der angegebenen ID. Auf diese Weise wissen Sie, woher Sie Ihre Daten erhalten, und der Webhook-Aufruf wird im Grunde nur zu einer Benachrichtigung, die Sie darüber informiert, dass Sie mit der API einchecken sollten.

2

Eigentlich können Sie den Zugriff auf Ihre Webhooks nur auf die Stripe IPs beschränken. Aus diesem Grund haben Stripe eine Liste von Webhooks ips aktualisiert.

https://stripe.com/docs/ips

Ich habe es nur für ein Projekt mit Laravel und Streifen.

//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. 
    } 

über die Sicherheit der remote_addr Variable: Sie können wie etwas tun Is it safe to trust $_SERVER['REMOTE_ADDR']?

Denken Sie daran, zusätzliche Maßnahmen zu ergreifen, die Herkunft ip zu erhalten, wenn Sie hinter einem Proxy oder einen CDN-Dienst wie Cloudflare sind, usw.