POST i GET ASP.NET CORE

0

Witam, mój problem wygląda następująco.

W widoku Edit.cshtml mam formularz

<form asp-action="Edit" asp-controller="Admin" method="post">

w którym wykorzystuję metodę post.

Następnie w kontrolerze posiadam metodę:

[HttpGet]
        public IActionResult Edit(int id)
        {
            if (ModelState.IsValid)
            {
                var student = _adminModelRepository.FindStudent(id);
 
                return View(student);
            }
            
            return View();
        }

oraz

[HttpPost]
        public IActionResult Edit(Student student)
        {
             
            if (ModelState.IsValid)
            {
                _adminModelRepository.EditStudent(student);
                var model = _adminModelRepository.ShowList();
                TempData["Message"] = "Edycja powiodła się!";
                return View();
            }
            ModelState.AddModelError(string.Empty, "Wystąpił błąd przy edycji!");
            return View();
        }

Mianowicie chodzi o to że gdy wyświetlę listę uczniów obok każdego mam button "Edit" który jest** asp-action="Edit" asp-route-id="@item.StudentId"**, i wtedy zostaję użyty atrybut HttpGet czyli wyświetlony zostanie widok Edit(formularz) oraz zostanie pobrane Id ucznia obok którego kliknąłem button "Edit", zostanie ono przekazane do parametru 'int id' w metodzie. Następnie gdy już wypełnię formularz oraz go wyślę dalej to zostanie użyty atrybut HttpPost dane z formularza zostaną przyjęte w parametrze "Student student".

Chciałbym teraz podmienić ucznia którego Id mam w jednej metodzie[httpget] z uczniem którego mam w drugiej metodzie [httppost]. Wiem, że całą zamiana powinna zachodzić w metodzie gdzie jest użyty atrybut POST lecz skąd mam tam uzyskać Id ucznia który został pobrany w metodzie z atrybutem GET ?

0

Nie wiem czemu chcesz coś "podmieniać".
W widoku edycji przechowaj sobie ID edytowanego ucznia w jakimś hidden input w polu formularza.

0

@somekind
To ja mam pytanie. Czy warto ze względów bezpieczeństwa te id jakoś hashowac? Czy nie warto?

0

Ja się spotkałem z dodawaniem pewnej wartości do id, a potem naoperacjach z bazą odejmowanie jej, ale nie wiem na ile to jest tutaj możliwe.

1

Jak zahashujesz, to nie będziesz mógł tego użyć po stronie serwera, to brzmi raczej jak szyszka w tyłku niż bezpieczeństwo.

1
Dregorio napisał(a):

Ja się spotkałem z dodawaniem pewnej wartości do id, a potem naoperacjach z bazą odejmowanie jej, ale nie wiem na ile to jest tutaj możliwe.

po co takie cuda?

jeżeli nie chcesz mieć łatwych do ustrzelenia idków, to użyj sobie guidów

i tak koniec końców powinieneś weryfikować czy dany user coś tam mógł zrobić

0

@WeiXiao: Podobno dla security xd Nie mówię, że najlepsze rozwiązanie, ale działa i wiem, że w kilku większych formach używają :)

1

No w dodawaniu i odejmowaniu nie ma co nie działać. Ale wpływu na bezpieczeństwo nie ma to też żadnego.
No chyba, że założenie jest takie, że atakujący pęknie ze śmiechu widząc takie "zabezpieczenia".

0

@somekind
Bardziej chodziło mi tu o hashowanie tego np. na md5 a dodawanie "salt", które później z powrotem było "zdejmowane" a md5 rozszyfrowywane. Sens to ma tylko bardziej mnie ciekawi czy są inne prostsze opcje na zabezpieczenie ID

0

@Phoryn:

ale jaki jest zysk właściwie? że user/ktoś nie pozna jakiego id masz w bazie?

czemu poznanie przez kogoś [zwykłego id]* stanowiłoby problem?

* poza fakturami wystawionymi na świat jako guidy, bo wygodniej dla usera.

1
Phoryn napisał(a):

@somekind
Bardziej chodziło mi tu o hashowanie tego np. na md5 a dodawanie "salt", które później z powrotem było "zdejmowane" a md5 rozszyfrowywane. Sens to ma tylko bardziej mnie ciekawi czy są inne prostsze opcje na zabezpieczenie ID

No to w sumie bardzo dobry pomysł. Tylko jak to zaimplementujesz z md5, to podziel się na forum.

0

@somekind
Chyba pomyliłem hashowanie z encription...
@WeiXiao
A to było właśnie moje pytanie :) czy opłaca się to robić. Czy jest po co.

0

Wiesz, generalnie @obscurity zawsze jakoś tam utrudnia zrozumienie systemu atakującemu, ale pytanie czy warto

0

@WeiXiao
A no właśnie. kiedyś w jakimś tutorialu pamiętam, że coś takiego robili i właśnie zastanawiałem się czy ma to większe znaczenie.
To już nie będę otwierał nowego wątku, zapytam tutaj.
To jak zabezpieczyć np. akcję kontrolera typu GET, zwracająca obiekt z bazy po id? Teoretycznie użytkownik będzie mógł strzelać po wszystkich id po kolei i pobierać nasze obiekty.

1
Phoryn napisał(a):

@WeiXiao
A no właśnie. kiedyś w jakimś tutorialu pamiętam, że coś takiego robili i właśnie zastanawiałem się czy ma to większe znaczenie.
To już nie będę otwierał nowego wątku, zapytam tutaj.
To jak zabezpieczyć np. akcję kontrolera typu GET, zwracająca obiekt z bazy po id? Teoretycznie użytkownik będzie mógł strzelać po wszystkich id po kolei i pobierać nasze obiekty.

Podstaw zabezpieczenia do backend. Musisz weryfikować czy masz dostęp do danego zasobu. Dla utrudnienia możesz stosować Guid.

2
Phoryn napisał(a):

To jak zabezpieczyć np. akcję kontrolera typu GET, zwracająca obiekt z bazy po id? Teoretycznie użytkownik będzie mógł strzelać po wszystkich id po kolei i pobierać nasze obiekty.

Jeśli masz takie obawy, to poza autoryzacją endpointu można jeszcze pomyśleć o jakimś rate limit.

1 użytkowników online, w tym zalogowanych: 0, gości: 1