konto usunięte

Temat: Walidacja formularzy w angular.js

Witam!
Uczę się angular.js i zastanawiam się na ile bezpieczne jest używanie tego frameworka?
Robiąc za pomocą angular.js takie rzeczy jak system logowania albo walidacja formularzy wystarczy, że ktoś wyłączy obsługę javasript albo pogrzebie trochę w kodzie html i może złamać takie zabezpieczenia.
Jak to widzicie?
Marek Karmelski

Marek Karmelski PHP Programmer,
Magento dev, Agencja
reklamowa White
Ducky

Temat: Walidacja formularzy w angular.js

Walidacja po stronie angulara czy też javascript to tak naprawdę ozdobnik/dodatek, powinieneś zawsze walidować dane po stronie serwera.
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Walidacja formularzy w angular.js

A to niby dlaczego po stronie serwera ?
Po co obciążać serwer i generować requesty skoro przeglądarka wstępnie może zadbać o prawidłowe wyniki ?

Nawet walidacja porównująca dane w bazie za pomocą Ajax jest lepszym rozwiązaniem niż wielokrotne wysyłanie całego formularza.
Marek Karmelski

Marek Karmelski PHP Programmer,
Magento dev, Agencja
reklamowa White
Ducky

Temat: Walidacja formularzy w angular.js

...a co jeżeli ktoś wyłączy obsługę js-a w przeglądarce?
Maciej F.:
A to niby dlaczego po stronie serwera ?
Po co obciążać serwer i generować requesty skoro przeglądarka wstępnie może zadbać o prawidłowe wyniki ?

Nawet walidacja porównująca dane w bazie za pomocą Ajax jest lepszym rozwiązaniem niż wielokrotne wysyłanie całego formularza.
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Walidacja formularzy w angular.js

Maciej M.:
javasript albo pogrzebie trochę w kodzie html i może złamać takie zabezpieczenia.
Jak to widzicie?

Obecnie toczą się żywe dyskusje czy tworzyć obsługę formularzy dla tych, którzy mają wyłączone JavaScript.

Jeszcze niedawno JS stwarzało wiele problemów ze względu na brak kompatybilności między wersjami i przeglądarkami. Ale to już przeszłość - i coraz bardziej bezzasadnym jest wyłączanie JavaScript w przeglądarkach.

Ludzie nadal się boją bo ich straszą różne komunikaty - ale JS jest już bezpieczną i coraz bardziej dopracowaną technologią.
Szala argumentów mocno przechyla się w stronę nie obsługiwania przeglądarek z wyłączonym JS.
Już nawet banki, urzędy a nawet facebook nie zadziała prawidłowo bez JS.

Wracając do pytania o bezpieczeństwo. Jeżeli nawiążesz sesję podczas logowania i korzystasz z niej przy autoryzacji każdego kolejnego requestu - to jest bezpieczne rozwiązanie.
Jeżeli chcesz zaszyfrować wychodzące dane to po prostu wysyłasz je po ssl.
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Walidacja formularzy w angular.js

Marek K.:
...a co jeżeli ktoś wyłączy obsługę js-a w przeglądarce?

A co jeżeli komuś się spieszy do pracy i wykręci sobie koła z samochodu ?

Należę do tej grupy programistów, którzy uważają, że wyznawców teorii spiskowych należy zmuszać do myślenia a nie niańczyć. Zmuszać do włączania JS i już.
Marek Karmelski

Marek Karmelski PHP Programmer,
Magento dev, Agencja
reklamowa White
Ducky

Temat: Walidacja formularzy w angular.js

Zwykły użytkownik internetu nie wyłączy celowo js-a, 95% nawet nie wie gdzie jest taka możliwość w przeglądarce. Tutaj trzeba brać pod uwagę te osoby, które mogą włamać się na twój serwer. Pamiętaj, strona/aplikacja jest jak łańcuch, jest tak bezpieczna jak bezpieczne jest najsłabsze ogniwo.

konto usunięte

Temat: Walidacja formularzy w angular.js

Maciej F.:
Marek K.:
...a co jeżeli ktoś wyłączy obsługę js-a w przeglądarce?

A co jeżeli komuś się spieszy do pracy i wykręci sobie koła z samochodu ?

Należę do tej grupy programistów, którzy uważają, że wyznawców teorii spiskowych należy zmuszać do myślenia a nie niańczyć. Zmuszać do włączania JS i już.

Nie chodzi o znawców teorii spiskowych.
Chodzi o taki scenariusz ataku:

1. Wyłączam obsługę js (walidacja przestaje działać)
2. Przez formularz wstrzykuję niebezpieczny kod
3. Jeśli serwer nie zwaliduje treści, którą wpisałem w formularzu to atak zostanie przeprowadzony poprawnie.

Właśnie o to pytałem - jakie są standardy, bo niebezpieczeństwo zdaje się być ogromne.
Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Walidacja formularzy w angular.js

Walidacja powinna być jedna, zawsze po stronie serwera, bo tylko serwer może komunikować się z bazą danych np. w celu sprawdzenia unikalności wprowadzanych danych. Nie ma najmniejszego sensu mnożyć bytów i walidować w dwóch miejscach, bo o pomyłkę czy przeoczenie bardzo łatwo. Jeśli chcemy userowi zrobić dobrze i walidować dane online, podczas wprowadzania wartości do kontrolek, to można to zrobić poprzez Ajaxa wywołując właśnie tę jedną metodę walidującą po stronie serwera.
Brak walidacji po stronie serwera, to proszenie się o kłopoty.

konto usunięte

Temat: Walidacja formularzy w angular.js

Andrzej P.:
Walidacja powinna być jedna, zawsze po stronie serwera, bo tylko serwer może komunikować się z bazą danych np. w celu sprawdzenia unikalności wprowadzanych danych. Nie ma najmniejszego sensu mnożyć bytów i walidować w dwóch miejscach, bo o pomyłkę czy przeoczenie bardzo łatwo.

Przesadzasz. Robisz sobie zestaw walidatorów opartych o konfigurację w formacie JSON albo coś podobnego i taką konfigurację pchasz również do widoku. I masz walidatory sprawdzające długość, format itp. Po co za każdym razem przesyłać dane do serwera, generować niepotrzebny ruch itp?
Jedyne co wymaga sprawdzania po stronie serwera to unikatowość bo bez odpytania źródła danych się nie obejdzie. I to można robić np w momencie gdy pole formularza traci focus + przy zmianie jeżeli zastosujesz odpowiednie limitowanie zapytań.

Walidacja po stronie serwera - oczywiście. Ale klient powinien mieć swoją. Od tego mamy JS żeby odciążać serwer gdzie tylko możemy.

konto usunięte

Temat: Walidacja formularzy w angular.js

Temat rozwinął się bardzo ciekawie. Nie sądziłem, że Wasze odpowiedzi skłonią mnie do tylu przemyśleń.
Dzięki ;)Ten post został edytowany przez Autora dnia 09.06.15 o godzinie 14:10
Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Walidacja formularzy w angular.js

Dariusz P.:
Przesadzasz. Robisz sobie zestaw walidatorów opartych o konfigurację w formacie JSON albo coś podobnego i taką konfigurację pchasz również do widoku. I masz walidatory sprawdzające długość, format itp. Po co za każdym razem przesyłać dane do serwera, generować niepotrzebny ruch itp?
Trzymanie jednej rzeczy w 2 miejscach zawsze rodzi niebezpieczeństwo przeoczenia czegoś. Im coś jest bardziej skomplikowanego, tym bardziej jest podatne na błędy. A z tym ruchem, to raczej ty przesadzasz - przy obecnych przepustowościach to jest wydumany problem. Strasznie obciążę łączę i serwer jak mu puszczę kilkadziesiąt bajtów adresu email do zwalidowania. Come on... :)
Marek Karmelski

Marek Karmelski PHP Programmer,
Magento dev, Agencja
reklamowa White
Ducky

Temat: Walidacja formularzy w angular.js

Front-end i Back-end to dwa zupełnie odrębne światy, to co wydaje się błahe i niepotrzebne na froncie, już nie konieczne takie jest po stronie backu. Walidacja po stronie użytkownika z wykorzystaniem czystego js-a, jQury, Ajaxa, czy też angulara jak najbardziej, w końcu chodzi o doznania użytkownika korzystającego z aplikacji (UX), ale NIGDY nie opierałbym się tylko na tym, walidacja po stronie serwera ZAWSZE.

Temat: Walidacja formularzy w angular.js

A ja zaproponuję coś w rodzaju walidacji uzupełniającej się.

Po stronie usera w czystym JS (lub jQuery) można sprawdzać poprawność e-maila (małpy, kropki), czy w polu na liczby na pewno są tylko cyfry, czy zachowano minimalną i maksymalną ilość znaków (np. imię powinno mieć co najmniej 2 litery) itp. To wszystko można zrobić bez obciążania serwera, korzystając z jakichś standardowych bibliotek lub napisać sobie samemu. Po stronie serwera sprawdzamy już dokładniej czy np. login/email nie jest już używany (podczas rejestracji), filtruje się treści z ewentualnego sql injection. Dla pewności można też sprawdzić, czy formularz faktycznie jest wysłany z tej samej domeny a nie spreparowanego np. na localhoście.

Edyta: oczywiście wszystko zależy od rodzaju formularza i jego przeznaczenia. Bo czasami zachodzi konieczność bardzo dokładnej walidacji każdego pola po stronie serwera.Ten post został edytowany przez Autora dnia 09.06.15 o godzinie 16:31

konto usunięte

Temat: Walidacja formularzy w angular.js

Andrzej P.:
Dariusz P.:
Przesadzasz. Robisz sobie zestaw walidatorów opartych o konfigurację w formacie JSON albo coś podobnego i taką konfigurację pchasz również do widoku. I masz walidatory sprawdzające długość, format itp. Po co za każdym razem przesyłać dane do serwera, generować niepotrzebny ruch itp?
Trzymanie jednej rzeczy w 2 miejscach zawsze rodzi niebezpieczeństwo przeoczenia czegoś. Im coś jest bardziej skomplikowanego, tym bardziej jest podatne na błędy. A z tym ruchem, to raczej ty przesadzasz - przy obecnych przepustowościach to jest wydumany problem. Strasznie obciążę łączę i serwer jak mu puszczę kilkadziesiąt bajtów adresu email do zwalidowania. Come on... :)

Wydaje się. Walidacja całego formularza w JS który jest w stanie wykonać np 800000 instrukcji w ciągu sekundy będzie trwała mniej niż milisekundę. Ta sama walidacja nawet przy wydajnej aplikacji to koszt 10-60ms (czas wykonania skryptu + czas potrzebny na komunikację serwera i otrzymanie odpowiedzi). Jak masz spory ruch to się może okazać że taka walidacja w wielu miejscach na stronie ograniczy Ci ilość requestów o 10-20% (przykład z doświadczenia).

Komplikowanie to naturalna kolej rzeczy. Dlatego się pisze programy by skomplikowane rzeczy automatyzować. Niekoniecznie upraszczać. Np używając noda, bibliotekę z walidatorami jestem w stanie przenieść do front-endu 1:1. Z PHP i innymi językami gorzej. Ogólnie nie jest to kłopot. Robisz zestaw metod które przyjmują te same parametry i dają te same rezultaty. Jak się o nie boisz - dopisz testy jednostkowe.

Jak powiedzieli koledzy wyżej. Doświadczenia użytkownika są najważniejsze.
Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Walidacja formularzy w angular.js

Dariusz P.:
Wydaje się. Walidacja całego formularza w JS który jest w stanie wykonać np 800000 instrukcji w ciągu sekundy będzie trwała mniej niż milisekundę. Ta sama walidacja nawet przy wydajnej aplikacji to koszt 10-60ms (czas wykonania skryptu + czas potrzebny na komunikację serwera i otrzymanie odpowiedzi). Jak masz spory ruch to się może okazać że taka walidacja w wielu miejscach na stronie ograniczy Ci ilość requestów o 10-20% (przykład z doświadczenia).
Jak masz spory ruch, to oznacza to, że masz sporą liczbę userów w systemie. Jeśli ty przy kilku tysiącach userów (a w praktyce dopiero przy takiej liczbie de facto jest zauważalne spowolnienie) rezygnujesz z walidacji po stronie serwera, to ja ci gratuluję zaufania do użytkowników. Ja takiego nie mam.

konto usunięte

Temat: Walidacja formularzy w angular.js

Andrzej P.:
Dariusz P.:
Wydaje się. Walidacja całego formularza w JS który jest w stanie wykonać np 800000 instrukcji w ciągu sekundy będzie trwała mniej niż milisekundę. Ta sama walidacja nawet przy wydajnej aplikacji to koszt 10-60ms (czas wykonania skryptu + czas potrzebny na komunikację serwera i otrzymanie odpowiedzi). Jak masz spory ruch to się może okazać że taka walidacja w wielu miejscach na stronie ograniczy Ci ilość requestów o 10-20% (przykład z doświadczenia).
Jak masz spory ruch, to oznacza to, że masz sporą liczbę userów w systemie. Jeśli ty przy kilku tysiącach userów (a w praktyce dopiero przy takiej liczbie de facto jest zauważalne spowolnienie) rezygnujesz z walidacji po stronie serwera, to ja ci gratuluję zaufania do użytkowników. Ja takiego nie mam.

Wybacz ale rozumienie tekstu czytanego się kłania. Zaznacz mi proszę fragment gdzie napisałem że walidacji po stronie serwera nie ma. Nie zrozumiałeś też fragmentu gdzie napisałem jak to działa w praktyce.

Robisz sobie konfigurację w stylu:

{
name: { length: { min: 3, max: 50 } }
}


Taka konfiguracja (minimalny przykład) leci również do klienta. Użytkownik może 50x wysłać nieprawidłowy formularz, 50x odbije się od walidacji js. I wygeneruje 0 dodatkowych requestów do serwera.
W końcu poprawi jak trzeba i dane prześle. Przejdą walidację na serwerze za pierwszym razem i zostaną przetworzone.

W Twoim wypadku wygenerował byś 50 requestów żeby przeszedł jeden. Po co?
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Walidacja formularzy w angular.js

Walidacja po stronie serwera: TAK - Zawsze ! żeby bzdur nie zapisywać w bazie i nie wykrzaczyć algorytmu.

Walidacja po stronie JS: TAK: - Wskazane ! żeby nie pchać zbędnego ruchu przez sieć, zwiększyć komfort pracy użytkownika.

Wstrzykiwanie niebezpiecznego kodu: - zwolnić programistę :)

Następna dyskusja:

OOP -> walidacja formula...




Wyślij zaproszenie do