• 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
108 wizyt
pytanie zadane 13 lutego w PHP, Symfony, Zend przez Greeenone Stary wyjadacz (12,380 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 (250,310 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 (12,380 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 (168,400 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 (250,310 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 74 wizyt
0 głosów
2 odpowiedzi 129 wizyt
pytanie zadane 9 października 2017 w PHP, Symfony, Zend przez Maciejunio Nowicjusz (180 p.)
0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 6 października 2017 w PHP, Symfony, Zend przez Adrian1999 Nałogowiec (33,280 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

66,527 zapytań

113,290 odpowiedzi

239,931 komentarzy

46,657 pasjonatów

Przeglądających: 280
Pasjonatów: 8 Gości: 272

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.

...