Słyszałem ludzi, którzy tu i tam wykładają w Internecie, że najlepszą praktyką jest ukrywanie publicznych identyfikatorów baz danych w aplikacjach internetowych. Przypuszczam, że mają one głównie na myśli w formie i adresach URL, ale nigdy nie czytałem na ten temat nic więcej niż kęsa.
EDYCJA : Oczywiście teraz, gdy o to pytam, znajduję pewne zasoby na ten temat:
- /programming/2374538/obscuring-database-ids
- /programming/1895685/should-i-obscure-primary-key-values
- http://joshua.schachter.org/2007/01/autoincrement.html
Te linki zaspokoiły moją ciekawość, ale posty SO nie mają zbyt wielu głosów i niekoniecznie są skoncentrowane wokół tematu w tym kontekście, więc nie jestem pewien, co z tego zrobić, a niektórzy twierdzą, że trzeci link jest fałszywy. Pozostawiam resztę mojego postu nienaruszoną:
Rozumiem różnice między niejasnością a bezpieczeństwem, a także to, jak mogą one ze sobą współpracować, ale nie wyobrażam sobie, dlaczego byłoby to konieczne.
Czy jest w tym jakaś prawda, czy to tylko paranoja, czy też jest to całkowicie nieprawdziwe?
Mogę wymyślić sposoby, aby to zrobić, ale oczywiście dodaje dużo złożoności do kodu aplikacji. W jakich okolicznościach byłoby to przydatne? Jeśli to jest coś, co ludzie często robić, jak jest to zwykle stosowane? Mieszasz identyfikatory? Coś innego? Wygląda na to, że dużo pracy wymaga niewiele większego bezpieczeństwa. Nie szukam prawdziwych rozwiązań, chcę tylko dowiedzieć się, jak / dlaczego ludzie robiliby to w prawdziwym świecie.
Czy to naprawdę uważa się za „najlepszą praktykę”, czy jest to jedynie mikrooptymalizacja o niewielkiej wartości?
UWAGA : Myślę, że kilku ludzi mogło mieć błędny pomysł: nie sugeruję, że trudne do odgadnięcia identyfikatory byłyby jedynym mechanizmem bezpieczeństwa, oczywiście byłyby to zwykłe kontrole dostępu. Załóżmy, że są na miejscu, a sama znajomość identyfikatora lub hashowanego identyfikatora rekordu nie wystarczy, aby udzielić dostępu.