UUID zamiast auto-increment ID w Laravelu


4 lutego 2021 / Michał Kortas


Zamiast stosować przewidywalne, inkrementowane identyfikatory w tabelach bazy danych zaleca się często, ze względów bezpieczeństwa, używanie tzw. UUID, czyli unikalnych identyfikatorów tekstowych. Taki klucz w tabeli maksymalnie niweluje skuteczność ataków polegających na kolejnym odpytywaniu URL, zwiększając jedynie parametr ID o jeden. Na przykładzie PHP i Laravela zademonstruję sposób na użycie UUID w projekcie.

Laravel i migracje tabel z kluczem UUID

Modyfikacja migracji

Standardowo tabele w migracjach posiadają klucz podstawowy zdefiniowany metodami id()  lub bigIncrement().

Jeśli chcemy zmienić klucz na UUID musimy zmodyfikować klasę migracji w taki oto sposób:

Po uruchomieniu migracji kolumna ID w tabeli nie będzie miała już typu INT / BIGINT i właściwości auto-increment.

UUID - klucz podstawowy

UUID – klucz podstawowy

Modyfikacja Modeli

To jeszcze nie wszystko. Jeśli korzystamy z Modeli Eloquenta musimy wprowadzić w nich kilka zmian. Najprostszym u uniwersalnym sposobem będzie utworzenie nowego Traita, którego będziemy mogli dołączyć do każdego modelu, który będzie miał UUID jako primary key.

Trait UUID

W katalogu app/Traits utwórzmy nowy plik o nazwie Uuid.php

Ustawiamy typ klucza na ciąg znaków i wyłączamy domyślną jego inkrementację.

Dołączanie Traita w Modelu Eloquenta

Od tej pory w każdym modelu, który ma implementować UUID primary key należy dodać:

Po wywołaniu metody create() na takim modelu klucz podstawowy będzie wyglądał w ten oto sposób.

Przykładowe UUID w bazie

Przykładowe UUID w bazie

UUID został zaimplementowany z powodzeniem.

A czy Ty używasz UUID w swoim projekcie? Widzisz jakieś wady, a może same zalety?


Tagi:


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.