-
1. Data: 2015-01-07 15:49:43
Temat: Problem z bezpieczeństwem danych
Od: Marek <p...@s...com>
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
-
2. Data: 2015-01-07 16:17:13
Temat: Re: Problem z bezpieczeństwem danych
Od: Marek <p...@s...com>
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?
-
3. Data: 2015-01-07 16:41:10
Temat: Re: Problem z bezpieczeństwem danych
Od: "Jordan Szubert" <u...@j...us.to>
Dnia 07-01-2015 o 16:17:13 Marek <p...@s...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
-
4. Data: 2015-01-07 18:54:35
Temat: Re: Problem z bezpieczeństwem danych
Od: Marek <p...@s...com>
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
-
5. Data: 2015-01-07 20:13:36
Temat: Re: Problem z bezpieczeństwem danych
Od: Borys Pogoreło <b...@p...edu.leszno>
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
-
6. Data: 2015-01-07 23:42:18
Temat: Re: Problem z bezpieczeństwem danych
Od: Marek <p...@s...com>
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
-
7. Data: 2015-01-08 21:28:53
Temat: Re: Problem z bezpieczeństwem danych
Od: Marek <p...@s...com>
Temat rozwiązany. Dziękuję Wam za zainteresowanie :-)
--
Pozdrawiam,
Marek