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

Zabezpieczenie formularza - Laravel

–1 głos
95 wizyt
pytanie zadane 13 lutego w PHP, Symfony, Zend przez Greeenone Stary wyjadacz (10,960 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 przez Arkadiusz Waluk Ekspert (245,570 p.)
wybrane 14 lutego 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 przez Greeenone Stary wyjadacz (10,960 p.)
edycja 14 lutego 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 przez Ehlert Mędrzec (162,660 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 przez Arkadiusz Waluk Ekspert (245,570 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
0 odpowiedzi 31 wizyt
0 głosów
2 odpowiedzi 123 wizyt
pytanie zadane 9 października 2017 w PHP, Symfony, Zend przez Maciejunio Nowicjusz (180 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 6 października 2017 w PHP, Symfony, Zend przez Adrian1999 Nałogowiec (33,070 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

63,266 zapytań

109,521 odpowiedzi

228,793 komentarzy

43,458 pasjonatów

Przeglądających: 184
Pasjonatów: 7 Gości: 177

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...