Dla bezpieczeństwa, staram się zezwalać tylko na IP (y) Mandrilla na dostęp do adresów URL.Mandrill Webhoocks - Bezpieczeństwo
Czy ktoś je zna?
Dla bezpieczeństwa, staram się zezwalać tylko na IP (y) Mandrilla na dostęp do adresów URL.Mandrill Webhoocks - Bezpieczeństwo
Czy ktoś je zna?
Posiadamy wiele adresów IP używanych do tworzenia haseł internetowych, ale mogą one (i prawdopodobnie będą) zmieniać się lub dodawać nowe podczas skalowania. Alternatywą byłoby dodanie ciągu zapytania do adresu URL webhooka, który dodasz w Mandrill, a następnie sprawdzenie tego ciągu zapytania, gdy pojawi się POST, abyś mógł sprawdzić, czy pochodzi on z Mandrill.
podpis Mandrill mieści się w nagłówku odpowiedzi HTTP: Authenticating-webhook-requests
W znalezisku żądanie nagłówka: X-Mandrill-Signature
. Jest to podstawowa 64 hashcode, podpisana przy użyciu klucza sieciowego. Ten klucz jest tajemnicą tylko dla twojego webhooka.
205.201.136.0/16
Właśnie whitelisted je w zaporze mojego serwera.
Wystarczy zastąpić stałych i używać tej funkcji:
<?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
}
?>
Jak opisano w mandryl na docs one stanowić podpis, aby sprawdzić, czy żądanie pochodzi od nich naprawdę. zbudować żądania tam jest kilka kroków:
mandrill_events
)X-Mandrill-Signature
oto próbka implementacja w Pythonie:
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")
Aha, miły i sprawny pomysł. Dla pozostałych dotyczy informacji o metadanych. To molo, na razie nie mogę polubić twojego wpisu :). Dziękujemy – devside
Nie można sfałszować adresów IP! – ankitjaininfo
@ankitjaininfo Natknąłem się na to pytanie, a twoja uwaga wzbudziła moją ciekawość. Moim pierwszym instynktem było "niełatwo". Następnie znalazłem ten post na giełdzie stosów zabezpieczeń IT: https://security.stackexchange.com/questions/14505/can-i-trust-the-source-ip-of-an-http-request. Lepsze 3 lata spóźnienia niż nigdy, jak sądzę. – nageeb