Per motivi di sicurezza, provo a consentire solo agli IP di Mandrill di accedere a questi URL.Mandrilli Webhoock - Sicurezza
Qualcuno li conosce?
Per motivi di sicurezza, provo a consentire solo agli IP di Mandrill di accedere a questi URL.Mandrilli Webhoock - Sicurezza
Qualcuno li conosce?
Abbiamo una gamma di IP utilizzati per i webhook, ma possono (e probabilmente lo faranno) cambiare o aggiungerne di nuovi quando scaliamo. Un'alternativa sarebbe aggiungere una stringa di query all'URL webhook che aggiungi in Mandrill e quindi controllare la stringa di query quando arriva un POST in modo da poter verificare che provenga da Mandrill.
firma di Mandrillo si trova nell'intestazione della risposta HTTP: Authenticating-webhook-requests
in Trova richiesta di intestazione: X-Mandrill-Signature
. Questa è una base64 dell'hashcode, firmata usando la chiave di aggancio del web. Questa chiave è riservata solo al tuo webhook.
205.201.136.0/16
ho appena li whitelist nel firewall del mio server.
Basta sostituire le costanti e utilizzare questa funzione:
<?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
}
?>
Come descritto nel mandrillo di docs, che forniscono una firma per verificare se la richiesta è venuto veramente da loro. per costruire la richiesta ci sono a pochi passi:
mandrill_events
)X-Mandrill-Signature
qui c'è un esempio di implementazione 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 sì, bello ed efficiente idea. Per gli altri, si tratta di informazioni sui metadati. È un pontile per il quale non mi piace il tuo post per ora :). Grazie – devside
Gli IP non possono essere falsificati! – ankitjaininfo
@ankitjaininfo Inciampato su questa domanda e il tuo commento ha suscitato la mia curiosità. Il mio primo istinto era quello di "non facilmente". Poi ho trovato questo post su IT Security Stack Exchange: https://security.stackexchange.com/questions/14505/can-i-trust-the-source-ip-of-an-http-request. Meglio 3 anni di ritardo che mai, immagino. – nageeb