Thread View: pl.comp.www
7 messages
7 total messages
Started by Marek
Wed, 07 Jan 2015 14:49
Problem z bezpieczeństwem danych
Author: Marek
Date: Wed, 07 Jan 2015 14:49
Date: Wed, 07 Jan 2015 14:49
32 lines
2044 bytes
2044 bytes
Mam pewien problem, który chciałbym zręcznie rozwikłać. Otóż mamy sobie CMS, który wyświetla swoją zawartość w postaci dokumentów HTML załóżmy, że w postaci: www.domena.pl/dokument?id=1 www.domena.pl/dokument?id=2 www.domena.pl/dokument?id=3 ... Na którejś z tych stron, powiedzmy ID=2, umieszczamy kod JavaScript, który w tle komunikuje się z serwerem (Ajax) i coś tam zmienia w treści dokumentu. Aby moduł po stronie serwera zmienił treść właściwego dokumentu, to trzeba podać mu ID tego dokumentu. I tu jest problem - owszem, to procedury w JS mogę przekazać ID dokumentu, który to dalej Ajax w tle przekaże do serwera. Ale w tym momencie każdy może uruchomić narzędzia deweloperskie i zmienić ten ID, co będzie skutkowało modyfikacją innego dokumentu. Drugie rozwiązanie: pamiętać w sesji ID otwartego dokumentu po stronie serwera, ale tu też to się nie sprawdzi gdy ktoś otworzy w dwóch oknach przeglądarki tą samą sesję. Trzecie rozwiązanie: zrezygnować z Ajaxa na rzecz prostych przeładowań formularza? Czy da się jakoś pozostać przy Ajaxie bez konieczności dorabiania w każdym module walidacji danej operacji, tak jak to w PHP<->HTML można łatwo zrobić? -- Pozdrawiam, Marek
Re: Problem z bezpieczeństwem danych
Author: Marek
Date: Wed, 07 Jan 2015 15:17
Date: Wed, 07 Jan 2015 15:17
4 lines
1029 bytes
1029 bytes
P.S. Albo prościej: jak zapewnić aby zapytania do serwera generowane przez Ajax dotyczyły ID dokumentu, który jest w danej chwili wyświetlany bez możliwości ingerencji użytkownika?
Re: Problem z bezpieczeństwem danych
Author: Jordan Szubert
Date: Wed, 07 Jan 2015 15:41
Date: Wed, 07 Jan 2015 15:41
14 lines
1407 bytes
1407 bytes
Dnia 07-01-2015 o 16:17:13 Marek <precz@spamowi.com> napisał(a): > P.S. > Albo prościej: jak zapewnić aby zapytania do serwera generowane przez > Ajax dotyczyły ID dokumentu, który jest w danej chwili wyświetlany bez > możliwości ingerencji użytkownika? może i coś się da wykombinować w tę stronę, ale czemu? jeżeli użytkownik ma prawo edytować 1 i 2, to czemu nie akceptować edycji do 1 i 2, a odrzucać do 3 niezależnie od tego, czy i kiedy 1 i 2 zostały wysłane do użytkownika do oglądania i może edycji? -- Jordan Szubert
Re: Problem z bezpieczeństwem danych
Author: Marek
Date: Wed, 07 Jan 2015 17:54
Date: Wed, 07 Jan 2015 17:54
32 lines
2549 bytes
2549 bytes
W dniu 2015-01-07 o 16:41, Jordan Szubert pisze: > > może i coś się da wykombinować w tę stronę, ale czemu? jeżeli użytkownik > ma prawo edytować 1 i 2, to czemu nie akceptować edycji do 1 i 2, a > odrzucać do 3 niezależnie od tego, czy i kiedy 1 i 2 zostały wysłane do > użytkownika do oglądania i może edycji? > W dobrą stronę kombinujesz. Moją intencją jest ograniczenie do edycji #2 bo nie ma pewności, że użytkownik ma prawo do edycji / wyświetlania / edycji / itp #1 i #3. Zabezpieczenie realizuję w tym CMS na poziomie formatki każdego dokumentu. Formatka zawiera wstawione specjalne tagi, które zastępowane są pracą modułów programowych. Pierwszy z nich zwykle bada czy dany użytkownik ma prawo do wyświetlenia danej strony - i jeśli nie, to przekierowuje Na "sorry, nie masz uprawnień". Pozostałe moduły generują treść itp. Jest tam też JS, który np. pozwala dodawać / usuwać obrazki. Jeśli z poziomu JS przekażę w Ajaxie polecenie "usuń obrazek #1 z w/w dokumentu #2" to dociera ono do elementu PHP nie związanego z dokumentem #2 np. ajaxZarzadzaObrazkamiDokumentu.php. Muszę go więc jakoś poinformować, że grzebiemy ID #2 i mamy skasować w nim obrazek #1. No i jeśli teraz ktoś podmieni w przeglądarce to co Ajax ma wysłać, to może w dowolnym innym dokumencie skasować obrazek #1. Musiałbym dublować walidację uprawnień w PHP, czego wolałbym uniknąć. Dlatego byłoby sensownie "niejawnie" poinformować w/w plik PHP, że działa w kontekście dokumentu #2. Szukam najprostszego rozwiązania. -- Pozdrawiam, Marek
Re: Problem z bezpieczeństwem danych
Author: Borys Pogoreło
Date: Wed, 07 Jan 2015 19:13
Date: Wed, 07 Jan 2015 19:13
13 lines
1448 bytes
1448 bytes
Dnia Wed, 07 Jan 2015 18:54:35 +0100, Marek napisał(a): > No i jeśli teraz ktoś podmieni w przeglądarce to co Ajax ma wysłać, to > może w dowolnym innym dokumencie skasować obrazek #1. Musiałbym dublować > walidację uprawnień w PHP, czego wolałbym uniknąć. Dlaczego chcesz uniknąć właściwej metody rozwiązania tego problemu? Walidacja powinna być przede wszystkim po stronie serwera, sam sobie zrobiłeś pod górkę i teraz kombinujesz jak ją usypać jeszcze wyższą. -- Borys Pogoreło borys(#)leszno,edu,pl
Re: Problem z bezpieczeństwem danych
Author: Marek
Date: Wed, 07 Jan 2015 22:42
Date: Wed, 07 Jan 2015 22:42
23 lines
2069 bytes
2069 bytes
W dniu 2015-01-07 o 20:13, Borys Pogoreło pisze: > Dlaczego chcesz uniknąć właściwej metody rozwiązania tego problemu? > Walidacja powinna być przede wszystkim po stronie serwera, sam sobie > zrobiłeś pod górkę i teraz kombinujesz jak ją usypać jeszcze wyższą. Ale walidacja jest po stronie serwera. Nie chcę tylko jej implementować w każdym z modułów po kolei. Jeśli mam np. 5 modułów pracujących na jedną stronę WWW, to 5x musiałbym walidować to samo. Straszna redundancja kodowa. Wyjaśnię, że walidacja jest uproszczona do zbadania czy użytkownik należy do uprawionej do wejścia na stronę WWW grupy. Nie ma potrzeby badania uprawnień do poszczególnych operacji. Dlatego preferuję rozwiązanie, że jeden moduł programowy odpowiedzialny jest za walidację i jest on pierwszym wywoływanym na stronie WWW zanim pozostałe dojdą do głosu. To się dobrze sprawdzało w układzie HTML/PHP ale Ajax z racji grzebania asynchronicznego w skryptach "trzecich" odrywa się od kontekstu. -- Pozdrawiam, Marek
Re: Problem z bezpieczeństwem danych
Author: Marek
Date: Thu, 08 Jan 2015 20:28
Date: Thu, 08 Jan 2015 20:28
5 lines
1090 bytes
1090 bytes
Temat rozwiązany. Dziękuję Wam za zainteresowanie :-) -- Pozdrawiam, Marek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads