• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Bezpieczeństwo AJAXa

0 głosów
632 wizyt
pytanie zadane 12 lipca 2022 w JavaScript przez Doge Gaduła (3,420 p.)
edycja 12 lipca 2022 przez Doge
Witam, czy da się zrobić w AJAXie, aby było kilka przycisków i każdy ma przypisaną tę samą funkcję JS z innym argumentem, która z tym argumentem asynchronicznie odsyła do dokumentu PHP, który tam pracuje z bazą danych, aby było to bezpieczne? Bo skrypty JS są jawne i użytkownik sam może wywołać funkcję JS. Lub czy da się ukryć pliki JS lub ogólnie pliki strony?

Mam jeszcze drugie pytanie - czy użytkownik może modyfikować skrypt JS strony? I czy może zrobić własną funkcję, która wysyła zapytanie AJAX? Bo wiem, że można wywołać stworzoną funkcję poprzez konsolę, ale nie wiem czy tam również można samemu stworzyć funkcję.

2 odpowiedzi

+1 głos
odpowiedź 12 lipca 2022 przez Comandeer Guru (607,060 p.)
wybrane 12 lipca 2022 przez Doge
 
Najlepsza

I czy może zrobić własną funkcję, która wysyła zapytanie AJAX? 

Ale po co tak kombinować, skoro można to zrobić curlem? ;) 

Jeśli coś leci przez HTTP, da się to zrobić ręcznie. Tutaj można by to zabezpieczyć przy pomocy tokenów anty-CSRF. Ogólnie, do każdego żądania dodawaj losowy token, który będzie się zmieniał za każdym razem. Tym sposobem nikt nie zrobi takiego żądania, bez znajomości tokena.

komentarz 12 lipca 2022 przez Doge Gaduła (3,420 p.)
I kiedy to zastosuję, to wtedy mogę normalnie AJAXem wysyłać zapytania do php i nikt nie będzie mógł nic zrobić?
2
komentarz 12 lipca 2022 przez Comandeer Guru (607,060 p.)
Nie ma zabezpieczenia, którego nie da się obejść. Ale zdecydowanie trudniej będzie coś zrobić, jeśli każda akcja będzie zabezpieczona dodatkowo tokenem.
komentarz 12 lipca 2022 przez Doge Gaduła (3,420 p.)
Czyli wtedy nie można sobie w konsoli wpisać funkcji i ona się nie wywoła?
2
komentarz 12 lipca 2022 przez Comandeer Guru (607,060 p.)
Oczywiście, że się wywoła. Nie da się w żaden sposób przed tym zabezpieczyć.

Niemniej – jaka to różnica, czy user kliknie przycisk, czy wpisze sobie z palca komendę w konsoli? Jeśli jakaś akcja jest jednorazowa lub jej użycie jest ograniczone np. raz na godzinę, to musisz to walidować po stronie serwera. Nie ma innej możliwości.
komentarz 12 lipca 2022 przez Doge Gaduła (3,420 p.)
edycja 12 lipca 2022 przez Doge
A czy user może sobie sam zapętlić taką funkcję? (napisać własną funkcję ogólnie) Lub czy może modyfikować skrypty na stronie? I czy są ogólnie jeszcze jakieś ważne rzeczy, które należy zrobić poza CSRF, aby nikt się nie włamał do bazy?
1
komentarz 13 lipca 2022 przez Comandeer Guru (607,060 p.)

Ogólnie to polecam poczytać te zasoby OWASP, tam jest sporo wiedzy na temat bezpieczeństwa.

A czy user może sobie sam zapętlić taką funkcję? (napisać własną funkcję ogólnie) Lub czy może modyfikować skrypty na stronie?

No może. Ale to nie powinien być problem, jeśli masz dobrą walidację danych po stronie serwera.

I czy są ogólnie jeszcze jakieś ważne rzeczy, które należy zrobić poza CSRF, aby nikt się nie włamał do bazy?

Trochę tu mieszasz dwie rzeczy. Bo przez Ajax nikt Ci się do bazy nie włamie – to jest zupełnie inny rodzaj ataku/problemu. Natomiast jeśli chodzi o takie klasyczne włamanie do bazy, to poczytaj sobie o sposobach zabezpieczenia się przed SQL injection, np. prepared statements.

2
komentarz 13 lipca 2022 przez Oscar Nałogowiec (29,360 p.)
Ogólnie trzeba pamiętać że o ile twórca strony ma konkrolę nad serwerem, ktoś kto wchodzi na tą stronę wchodzi z własnego komputera, nad którym na pełną kontrolę. Serwer nie wie czy żądanie (to w sumie tylko ciąg znaków) przyszło ze skryptu JS na przeglądarce, czy w ogóle ktoś wygenerował/skopiował sobie takie żądanie w inny sposób i przysłał je np. telnetem, albo z własnego programu. Przeglądarka też jest pod kontrolą użytkownika, może ją jakoś zmodyfikował ...
+2 głosów
odpowiedź 12 lipca 2022 przez SzkolnyAdmin Szeryf (89,690 p.)
Ad. 1. Da się, jak najbardziej. Bezpieczeństwo zapewni ci weryfikacja danych otrzymanych od usera w skrypcie działającym na serwerze (zanim wyślesz dane do bazy).

Ad. 2. Może i dlatego patrz Ad. 1.
komentarz 12 lipca 2022 przez Doge Gaduła (3,420 p.)
Może trochę źle sformułowałem pytanie, chodziło mi bardziej o bezpieczeństwo w sensie, że użytkownik nie może sam wywołać funkcji, która wywołuje się pod przyciskiem.

W jaki sposób można zweryfikować, że to akurat funkcja została wywołana poprzez przycisk, a nie konsolę?
1
komentarz 14 lipca 2022 przez jankustosz1 Nałogowiec (36,960 p.)
Nie jesteś w stanie tego zweryfikować. Jak pisali wyżej można zrobić token CSRF, ale to tylko utrudnienie (dwie linijki więcej dla osoby robiącej bota). Ogólnie im więcej asynchronicznych skomplikowanych requestów wysyłasz z jakimiś tokenami tym ciężej jest napisać bota, ale jets to zawsze możliwe, bo w teorii każdy może podejrzeć jak działa javascript strony i go zaimitować.

Podobne pytania

0 głosów
3 odpowiedzi 488 wizyt
0 głosów
1 odpowiedź 1,093 wizyt
pytanie zadane 8 marca 2021 w PHP przez fff Gaduła (3,950 p.)
0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 28 grudnia 2018 w PHP przez _Visni4PL_ Obywatel (1,320 p.)

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...