🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

7 total messages Started by Marek Wed, 07 Jan 2015 14:49
Problem z bezpieczeństwem danych
#408199
Author: Marek
Date: Wed, 07 Jan 2015 14:49
32 lines
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
#408200
Author: Marek
Date: Wed, 07 Jan 2015 15:17
4 lines
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
#408201
Author: Jordan Szubert
Date: Wed, 07 Jan 2015 15:41
14 lines
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
#408202
Author: Marek
Date: Wed, 07 Jan 2015 17:54
32 lines
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
#408203
Author: Borys Pogoreło
Date: Wed, 07 Jan 2015 19:13
13 lines
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
#408204
Author: Marek
Date: Wed, 07 Jan 2015 22:42
23 lines
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
#408205
Author: Marek
Date: Thu, 08 Jan 2015 20:28
5 lines
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