Nie przepadam za AJAX. Moja niechęć dotyczy nie tyle samej technologii, co jej nadużywania. Świat jednak idzie do przodu i trzeba pogodzić się z tym, że coraz więcej aplikacji z AJAX i podobnych technologii korzystać będzie. A czasami wykorzystanie nowej technologii niesie ze sobą nowe, lepsze błędy. Tym razem zaprezentuję prosty schemat dostępu do danych, który spotkałem w kilku implementacjach.
Znajdź błąd projektowy: wykorzystanie AJAX (część I)
Schemat DFD i opis do niego
Na początek prosty diagram DFD:

Na diagramie tym istotne są data flow, w szczególności te, które nazwałem od DF1 do DF6 oraz trust boundary. Fakt umieszczenia na diagramie dwóch obiektów aplikacji (aplikacja i webservice) nie jest specjalnie istotny, równie dobrze mógłby być jeden obiekt tego typu. Diagram ten przedstawia następującą historię:
- W pierwszym kroku klient (użytkownik) otrzymuje formatkę, na której może określić dane wyszukiwania. To, co użytkownik może wybrać na formatce jest ograniczone jego uprawnieniami. W zależności od roli użytkownika, pewne opcje są lub nie są dostępne. Wypełniona formatka jest wysyłana do aplikacji w DF1. Ponieważ DF1 przekracza trust boundary (tampering!) przesłane przez użytkownika parametry są weryfikowane po stronie serwera.
- Jeśli użytkownik przysłał poprawne dane, serwer generuje "szablon" strony (bez danych), na której osadzone jest odpowiednie zapytanie AJAX, które ma pobrać odpowiednie dane i zaprezentować je użytkownikowi. Wszystko to jest przesyłane do klienta przez DF2.
- Po załadowaniu strony w przeglądarce, generuje ona żądanie (osadzony w kroku drugim kod) do WebService w celu pobrania danych. To, jaka funkcja jest wywoływana i z jakimi parametrami zależy od przesłanych w pierwszym kroku przez użytkownika parametrów. Wywołanie odbywa się w DF3.
- Na podstawie otrzymanego od klienta zapytania, WebService konstruuje zapytanie do DB i przesyła je z wykorzystaniem DF4.
- Odpowiedź jest odbierana przez WebService w DF5
- Klient otrzymuje dane, których parametry określił w kroku pierwszym przez DF6, dane wyświetlane są na stronie.
Pytanie: gdzie jest błąd?
Ale aplikacje i bezpieczeństwo to nie moja bajka ...
Kravietz też słusznie prawi, przy czym bardziej chodziło mi o zawrócenie uwagi na to, co oznaczyłeś jako (2), czyli na fakt, że klient może wysłać do WS dowolne żądanie, które nie jest już przez WS sprawdzane odnośnie uprawnień użytkownika, bo istnieje nieuprawnione założenie, że klient wywoła WS tylko tak, jak mu Aplikacja pozwoli. A w rzeczywistości klient może wywołać WS jak chce, w szczególności kompletnie ignorując aplikację.
(...) A good programming philosophy is... if you don't completely control the information store, you can't completely trust the information store. (...)