Aus Sicherheitsgründen versuche ich nur Mandrill 's IP (s) auf diese URLs zugreifen zu lassen.Mandrill Webhocks - Sicherheit
Kennt jemand sie?
Aus Sicherheitsgründen versuche ich nur Mandrill 's IP (s) auf diese URLs zugreifen zu lassen.Mandrill Webhocks - Sicherheit
Kennt jemand sie?
Wir haben eine Reihe von IPs, die für Webhooks verwendet werden, aber sie können sich (und werden wahrscheinlich) ändern oder neue hinzufügen, wenn wir skalieren. Eine Alternative wäre, der Webhook-URL, die Sie in Mandrill hinzufügen, eine Abfragezeichenfolge hinzuzufügen und dann nach dieser Abfragezeichenfolge zu suchen, wenn ein POST eingeht, damit Sie überprüfen können, ob er von Mandrill stammt.
Mandrill Unterschrift wird in den HTTP-Antwort-Header zu finden: Authenticating-webhook-requests
im Request-Header finden: X-Mandrill-Signature
. Dies ist eine Base64 des Hashcodes, die mit einem Web-Hook-Schlüssel signiert wurde. Dieser Schlüssel ist nur für Ihren Webhook geheim.
205.201.136.0/16
Ich habe die weiße Liste gesetzt sie nur in Firewall meinen Server.
einfach die Konstanten ersetzen und diese Funktion verwenden:
<?php
function generateSignature($post)
{
$signed_data = WEB_HOOK_URL;
ksort($post);
foreach ($post as $key => $value) {
$signed_data .= $key;
$signed_data .= $value;
}
return base64_encode(hash_hmac('sha1', $signed_data, WEB_HOOK_AUTH_KEY, true));
}
//---
if (generateSignature($_POST) != $_SERVER['HTTP_X_MANDRILL_SIGNATURE']) {
//Invalid
}
?>
Wie docs in Mandrills beschrieben, bieten sie eine Unterschrift zu überprüfen, ob die Anfrage von ihnen wirklich kam. die Anfrage gibt es ein paar Schritte zu bauen:
mandrill_events
)X-Mandrill-Signature
Headerhier ist eine Beispielimplementierung in Python:
import hmac, hashlib
def check_mailchimp_signature(params, url, key):
signature = hmac.new(key, url, hashlib.sha1)
for key in sorted(params):
signature.update(key)
signature.update(params[key])
return signature.digest().encode("base64").rstrip("\n")
Oh ja, schön und effizient Idee. Bei den anderen geht es um Metadaten. Es ist ein Anlegesteg, ich kann deinen Post für jetzt nicht mögen :). Danke – devside
Kann nicht IPs gefälscht werden! – ankitjaininfo
@ankitjaininfo Stolperte über diese Frage und Ihr Kommentar weckte meine Neugier. Mein erster Instinkt war es, "nicht leicht" zu denken. Dann habe ich diesen Beitrag auf dem IT Security Stack Exchange gefunden: https://security.stackexchange.com/questions/14505/can-i-trust-the-source-ip-of-an-http-request. Besser 3 Jahre später als nie, denke ich. – nageeb