Istnieje wiele sposobów na zbudowanie uwierzytelnienia w produkcie opartym na API, takim jak SparkPost, a tym, który wybraliśmy na początku, jest użycie kluczy API. Wstrzykiwanie klucza API jako surowego nagłówka autoryzacyjnego lub za pomocą standardowej autoryzacji HTTP Basic ułatwia korzystanie z naszych API. Klucze API tego rodzaju są powszechnym standardem dla usług internetowych, ale jak bezpieczny jest ten system?
Ryzyka
Przy korzystaniu z jakiejkolwiek usługi internetowej, jeśli napastnik zdobędzie Twój klucz API, może działać w Twoim imieniu i robić rzeczy takie jak (w naszym przypadku):
wysyłanie ich e-maili za darmo przez Twoje konto
ściąganie listy odbiorców i przekazywanie ich spammerom (jeśli sami nie są spammerami)
edycja Twoich szablonów w celu wstrzyknięcia linków phishingowych
wysyłanie spamu lub phishingu w Twoim imieniu
Każdy z tych wyników może być bardzo szkodliwy dla Twojej reputacji i Twojego biznesu, a w przypadku phishingu bezpośrednio zaszkodzić Twoim użytkownikom końcowym. Dlatego niezwykle ważne jest, aby upewnić się, że nikt nie może odkryć Twojego klucza API.
Szanse
Czy usłyszałem bruteforce? Nasze klucze API są losowo generowanymi 40-znakowymi ciągami szesnastkowymi. To daje łącznie 1.4615e+48 kluczy API. Gdyby wszystkie 3 miliardy komputerów i smartfonów na świecie próbowały 100 kluczy API na sekundę, zakładając, że nasze serwery by na to pozwalały, przeszukiwanie wszystkich możliwych kluczy API zajmie więcej niż 150 000 000 000 000 000 000 000 000 000 lat. Dlatego łamanie klucza API po prostu nie ma sensu.
Jak więc można znaleźć Twój klucz API? Ponieważ klucz jest przekazywany jako nagłówek, można go odczytać za pomocą ataków typu man-in-the-middle, dlatego zawsze powinieneś upewnić się, że Twój klient sprawdza certyfikaty SSL podczas łączenia z naszymi API (to jest główny powód, dla którego wymagamy https dla połączeń API). Ponadto, jeśli nieostrożnie korzystasz z publicznych repozytoriów kodu, takich jak github, Twój klucz API może łatwo zostać ujawniony w sieci. To nie jest problem akademicki: są znane boty przeszukujące github w celu znajdowania kluczy API, a przez ten wektor miały miejsce udane ataki.
Whitelist IP na ratunek
Gdy tworzysz klucz API, możesz teraz określić listę IP, które są upoważnione do korzystania z tego klucza. Możesz określić kilka adresów IP, a także bloki IP, używając notacji CIDR, więc nie musisz wymieniać swoich serwerów indywidualnie. Gdy klucz API jest używany, dla API REST lub SMTP, porównamy łączący adres IP z tą listą, aby zezwolić lub odmówić dostępu.
Dzięki tej funkcji, nawet jeśli klucz API zostanie znaleziony lub skradziony, tylko Twoje serwery będą mogły z niego skorzystać. Biorąc pod uwagę ryzyka oraz jak łatwo jest to skonfigurować, zdecydowanie zalecamy, aby wszyscy nasi klienci korzystali z tej funkcji.
Ostatnie słowa
Kilka osobistych zaleceń dotyczących bezpieczeństwa:
Nie przechowuj swoich kluczy API w kodzie. Korzystanie z zmiennych środowiskowych, jak robi to Heroku, ma wiele korzyści
Możesz utworzyć nieograniczoną liczbę kluczy API i najlepiej dla bezpieczeństwa rozdzielić odpowiedzialności między kilka kluczy API, zamiast posiadać tylko jeden klucz szwajcarski. To także pozwoli Ci mieć różne listy dozwolonych adresów IP dla każdego klucza, dla jeszcze lepszej separacji obowiązków
Jeśli współpracujesz z osobami trzecimi, nie dziel się swoim kluczem API, ale stwórz nowy klucz dla nich, z tylko potrzebnymi uprawnieniami i przypisany do ich adresów IP
Ponieważ klucze API można tworzyć tylko przez UI, włączenie uwierzytelniania dwuetapowego na Twoim koncie SparkPost jest koniecznością i zajmuje tylko 2 minuty