Azek
19.04.2018, 21:00:39
Tworzę trochę bardziej rozbudowany projekt oparty na bazie danych. W skrócie wygląda to tak, że wyświetla się tabela z danymi i w każdym wierszu są przyciski: do zmian, do usunięcia.
Przykładowo mamy stronę z listą zamówień.
Problem jest następujący: jak przekazywać id zamówień między stronami? Można by użyć GET i mieć coś takiego:
| zamowienie1 | detale_zamowienia.php?id=1 | zmien_zamowienie.php?id=1 | usun_zamowienie.php?id=1 |
| zamowienie2 | detale_zamowienia.php?id=1 | zmien_zamowienie.php?id=2 | usun_zamowienie.php?id=2 |
Można też zrobić przez POST i ukryte pola z id. Pierwszy wariant jest wygodny, ponieważ można zapisać zakładkę bezpośrednio do zamówienia, ale mało bezpieczny, gdyż mogę podmienić numer i np. podejrzeć zamówienie, którego nie powinienem móc widzieć. Drugi wariant nie pozwala na zapisanie zakładki, ale jest trochę bezpieczniejszy, bo zmiana id wymaga już większej wiedzy i działań. Byłbym skłonny użyć GETa, jeśli istniałby sposób na przekazanie w linku danych, ale w jakimś stopniu zabezpieczonych przed zmianą.
Czy spotkaliście się z potrzeba "zaciemnienia" danych i jak to rozwiązaliście?
trueblue
19.04.2018, 21:05:38
Skoro możesz podmienić wartość id i podejrzeć zamówienie, którego nie powinieneś podejrzeć, to znaczy, że masz dziurawy system.
Powinieneś sprawdzać uprawnienia użytkownika do danego zasobu.
Azek
19.04.2018, 22:07:36
Dlatego pytam w jaki sposób przekazywać te dane? Póki co, korzystam z POSTa i ukrytych pól. To oczywiste, że nigdy nie można ufać otrzymanym zmiennym, ale może jest jakiś sposób przesyłanie ich w GET?
markuz
19.04.2018, 23:06:25
Jest coś takiego jak uprawnienia - jeżeli dana osoba nie powinna widzieć lub edytować jakiegoś zamówienia to po wejściu na np. produkt.php?id=5 powinna dostać informację, że nie ma dostępu do tego produktu, o tym pisał @trueblue wyżej i tak to powinieneś rozwiązać.
Możesz też robić zaciemnienia np. poprzez
http://hashids.org/php/, ale to nie zabezpieczy systemu a tylko niepotrzebnie go skomplikuje.
PawelC
19.04.2018, 23:42:37
1. Sprawdzaj czy ID to liczba i czy takie ID jest w bazie
2. Jeżeli masz tylko administratora, to przy pobieraniu do edycji sprawdzaj czy ma uprawnienia do tego, jak masz też użytkowników to sprawdzaj czy produkt od ID przesłanym metodą GET przypisany jest do danego użytkownika, wtedy unikniesz sytuacji, że ktoś będzie mógł edytować nie swoje produkty.
trueblue
20.04.2018, 06:15:02
Cytat(Azek @ 19.04.2018, 23:07:36 )

Dlatego pytam w jaki sposób przekazywać te dane?
Tak samo jak robisz aktualnie.
Pyton_000
20.04.2018, 08:18:01
Uprawnienia przede wszystkim. Musisz sprawdzać czy ID należy do osoby która chce dany zasów otworzyć. Nie dotyczy Super Admina.
Dodatkowo zamiast liczbowych ID możesz używać względnie bardzo długiego hash ktry albo może być wiliczany na podstawie danych z wiersza BD ablo generowany ręcznie (ręcznie w sensie przez jakiś algorytm). Wtedy masz zarytą sekwencyjność ergo nie wiadomo ile tak na prawdę jest zamówień (co może znowu służyć jako wiedza czy sklep/cokolwiek ma duży czy mały ruch)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.