• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zabezpieczenie formularza - Laravel

Object Storage Arubacloud
–1 głos
510 wizyt
pytanie zadane 13 lutego 2019 w PHP przez Greeenone Pasjonat (16,100 p.)

Hej,

Mam pewne pytanie dotyczące formularza. Zauważyłem, że po zmianie ID w linku formularza, ten aktualizuje dane dla użytkownika z owym ID.

Zrobiłem zabezpieczenie tego nadpisując pobrane ID poprze ID zalogowanego użytkownika.

  public function update(CreateUserSettingsRequest $request, $id){

    $id = Auth::user()->id;

    $dataUpdate = User::find($id);

    $dataUpdate->update($request->all());

    return redirect()->back();

  }

Czy to jest dobry sposób czy lepiej zrobić to za pomocą middleware ?

1 odpowiedź

+1 głos
odpowiedź 14 lutego 2019 przez Arkadiusz Waluk Ekspert (288,330 p.)
wybrane 14 lutego 2019 przez Greeenone
 
Najlepsza
Zasadnicze pytanie: po co robić pobieranie id użytkownika do aktualizacji z linku jeśli chcesz (jak rozumiem) zawsze aktualizować dane zalogowanego użytkownika? To nielogiczne. Albo ktoś może edytować różnych użytkowników (ewentualnie z jakimiś ograniczeniami) i wtedy pobiera informacje z linka albo może edytować tylko siebie i taka informacja jest niepotrzebna.

A nawet jeśli już miałbym coś takiego robić to Twoja metoda też jest dla mnie nielogiczna. Wysyłasz w adresie że chodzi o dane id, w kodzie ono nagle się zmienia na zupełnie inne i aktualizuje kogoś innego. Jasne, jak się ktoś zagłębi w kod to na pewno zobaczy co tam się dzieje. Jednak widząc adres np. /users/5 w życiu by mi do głowy nie przyszło, że to zaktualizuje użytkownika aktualnie zalogowanego (nadpisze sobie id), a nie o id 5 jak podałem. Jeżeli miałoby koniecznie tak zostać to dodałbym np. middleware, który sprawdzi czy mogę edytować danego użytkownika (czy zostało podane id mojego usera) - gdy tak to przechodzi, gdy nie rzuca 403.
komentarz 14 lutego 2019 przez Greeenone Pasjonat (16,100 p.)
edycja 14 lutego 2019 przez Greeenone

W momencie kiedy używam Patch i nie podaję mu $id, to ten wypluwa mi błąd

Missing required parameters for [Route: ] [URI: settings/{id}]

Chciałem po prostu ukryć z url'u ID użytkownika aby było tylko domain.com/settings

Czyli jeśłi dobrze zrozumiałem, to zabezpieczenie muszę wykonać w middleware który będzie sprawdzał czy edytowany użytkownik ma te same id co zalogowany użytkownik ?

Czy może w kontroli umieścić coś takiego:

    if (Auth::user()->id !== $id)
  {
      abort(403);
  }

 

1
komentarz 14 lutego 2019 przez Ehlert Ekspert (212,870 p.)
Ja nie widzę tutaj potrzeby żadnych porównań. Korzystasz z patcha, więc zakładam że robisz api. Wyciągnij usera z metody autoryzacji, z której korzystasz i po zawodach.
1
komentarz 14 lutego 2019 przez Arkadiusz Waluk Ekspert (288,330 p.)

@Greeenone, jeśli w routingu masz zdefiniowane, że dana ścieżka ma mieć id to chyba oczywiste że będzie krzyczał, gdy mu go nie podasz? Zmień routing, aby nie było tam parametru id, przy edycji weź zalogowanego użytkownika i będzie po sprawie.

Dalszą część napisałem jako dodatek. Jeśli chciałbyś to id z jakieś powodu tam zostawić to wtedy zrobiłbym warunek na wzór tego jak podałeś, zapewne w middleware.

Podobne pytania

0 głosów
2 odpowiedzi 543 wizyt
pytanie zadane 3 stycznia 2022 w C# przez KonDZIKs Bywalec (2,770 p.)
0 głosów
2 odpowiedzi 593 wizyt
pytanie zadane 7 września 2019 w PHP przez Saklavi Obywatel (1,240 p.)
0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 23 września 2021 w PHP przez Artek Stary wyjadacz (11,800 p.)

92,660 zapytań

141,553 odpowiedzi

319,994 komentarzy

62,028 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...