Istnieje ryzyko związane z ujawnianiem identyfikatorów baz danych. Z drugiej strony projektowanie aplikacji internetowych bez ich ujawniania byłoby niezwykle uciążliwe. Dlatego ważne jest, aby rozumieć ryzyko i uważać, aby im zaradzić.
Pierwszym zagrożeniem jest to, co OWASP nazwał „niezabezpieczonymi bezpośrednimi odniesieniami do obiektów”. Jeśli ktoś odkryje identyfikator jednostki, a Twoja aplikacja nie ma wystarczających mechanizmów kontroli autoryzacji, aby temu zapobiec, może zrobić rzeczy, których nie zamierzałeś.
Oto kilka dobrych zasad, których należy przestrzegać:
- Użyj zabezpieczeń opartych na rolach, aby kontrolować dostęp do operacji. Sposób, w jaki to się robi, zależy od wybranej platformy i struktury, ale wiele z nich obsługuje deklaratywny model zabezpieczeń, który automatycznie przekierowuje przeglądarki do etapu uwierzytelniania, gdy działanie wymaga pewnych uprawnień.
- Użyj zabezpieczeń programistycznych, aby kontrolować dostęp do obiektu. Jest to trudniejsze do zrobienia na poziomie struktury. Częściej jest to coś, co musisz wpisać do swojego kodu i dlatego jest bardziej podatne na błędy. To sprawdzenie wykracza poza sprawdzanie oparte na rolach, zapewniając nie tylko, że użytkownik ma uprawnienia do operacji, ale także ma niezbędne uprawnienia do konkretnego modyfikowanego obiektu. W systemie opartym na rolach łatwo jest sprawdzić, czy tylko menedżerowie mogą dawać podwyżki, ale poza tym należy upewnić się, że pracownik należy do działu konkretnego menedżera.
Istnieją schematy ukrywania prawdziwego identyfikatora przed użytkownikiem końcowym (np. Mapowanie między rzeczywistym identyfikatorem a tymczasowym, specyficznym dla użytkownika identyfikatorem na serwerze), ale argumentowałbym, że jest to forma zabezpieczenia przez zaciemnienie. Chcę skupić się na zachowaniu prawdziwych tajemnic kryptograficznych, a nie na próbach ukrycia danych aplikacji. W kontekście sieciowym jest to również sprzeczne z szeroko stosowanym projektem REST, w którym identyfikatory często pojawiają się w adresach URL w celu adresowania zasobu, który podlega kontroli dostępu.
Kolejnym wyzwaniem jest przewidywanie lub odkrycie identyfikatorów. Najłatwiejszym sposobem dla atakującego na wykrycie nieautoryzowanego obiektu jest odgadnięcie go na podstawie sekwencji numeracji. Poniższe wskazówki mogą pomóc złagodzić ten problem:
Ujawnij tylko nieprzewidywalne identyfikatory. Ze względu na wydajność możesz użyć numerów sekwencyjnych w relacjach klucza obcego w bazie danych, ale każda jednostka, do której chcesz się odwoływać z aplikacji internetowej, powinna również mieć nieprzewidywalny identyfikator zastępczy. To jedyne, które powinno być kiedykolwiek ujawnione klientowi. Używanie do tego losowych identyfikatorów UUID jest praktycznym rozwiązaniem do przypisywania tych kluczy zastępczych, nawet jeśli nie są one bezpieczne kryptograficznie.
Jednak jednym z miejsc, w których kryptograficznie nieprzewidywalne identyfikatory są konieczne, są identyfikatory sesji lub inne tokeny uwierzytelniające, w których sam identyfikator uwierzytelnia żądanie. Powinny one zostać wygenerowane przez kryptograficzną RNG.