Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP] Bezpieczeństwo skryptów
Forum PHP.pl > Forum > Przedszkole
!*!
Tak się zastanawiam nad zabezpieczeniem swoich aplikacji które w całości opierają się o ajax.
Budowane są przy użyciu PHP, to właśnie php nadaje odpowiednie zabezpieczenia sktyptów, filtruje dane przychodzące i tworzy sesje z useragentem, czesem trwania sesji itp.
Podpinając do tego ajax, z pliku index.php wczytywany jest plik koment.php w którym sprawdzane jest przez php to co napisałem wyżej. Jednak ajax ma tą wadę iż można podpatrzeć do jakiego pliku dany skrypt się odwołuje i bezpośrednio odczytać plik koment.php w oknie przeglądarki, co umożliwi odczytanie danych, bez "otoczki" pliku index.php.
Nie wygląda to zbyt dobrze, ale z drugiej strony jak ukryć dane, które chcemy pokazać? Czy jest jakaś możliwość wczytania przy pomocy ajax pliku koment.php do pliku index.php tak, aby nie było możliwości zobaczenia pliku koment.php w oknie przegladarki, aby był on tylko wyświetlany przy pomocy ajaxa w pliku index.php.
Quantum
Nie ma dla AJAX-a zabezpieczenia z prawdziwego zdarzenia. Na necie możesz znaleźć kilka rozwiązań najczęściej sprowadzających się do sesji, http_referer lub x_requested_with, które możesz łatwo podmienić Curl-em. W Kohana rozwiązali to tak :

  1. /**
  2. * Tests if the current request is an AJAX request by checking the X-Requested-With HTTP
  3. * request header that most popular JS frameworks now set for AJAX calls.
  4. *
  5. * @return boolean
  6. */
  7. public static function is_ajax()
  8. {
  9. return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
  10. }


tak jak mówiłem, nie jest to żadne zabezpieczenie. Na forum było już kilka takich tematów, poszukaj. Jedyne co Ci pozostaje to chyba napisanie autorskiego rozwiązania, wymyślenie jak najtrudniejszego algorytmu i zaciemnianie kodu od strony klienta. Na protokole HTTP nie zbudujesz bezpiecznego połączenia. Osobiście używam anty-floodingu, ustawiam maks. ilość żądań na dany okres czasu dla plików AJAX-owych, jeżeli klient nadmiernie korzysta z tych plików, blokuję mu dostęp.
koderrr
jesli dobrze rozumiem twoj problem to dodaj na stronie w ktorej includujesz plik z komentami nastepujace rzeczy

$add_site = true;


a potem w pliku do ktorego sie odwolujesz

if(!$add_site) exit;


proste i skuteczne biggrin.gif
Quantum
@koderrr autorowi chodzi o zabezpieczenie wycieku danych z plików dla AJAX-a.
!*!
sniffer32 Zaciemnianie kodu? Tzn? Firebugiem czy dragonfly i tak wszytko się wyciągnie. Jedyna różnica w pliku odczytanym bezpośrednio, a tym przez index.php to taka iż ten bezpośredni nie jest obudowany stylami itp. Po zainicjowaniu sesji np. po zalogowaniu i tak uzyska dostęp, właśnie tak się zastanawiam nad zliczaniem ilości wyświetleń, jeśli zostanie przekoroczony limit wyjdzie stosowny komunitakt np. z captcha.
Quantum
Przez zaciemnianie kodu miałem na myśli pisanie kodu w sposób nie zbyt przystępny dla potencjalnego "hakera". Nie chodzi tu o stosowanie nie mówiących nic nazw zmiennych czy zwiększania zawiłości składni itp, a najgorzej chyba kompresować kod i odpalać eval-em, wystarczy wtedy eval = alert; i kod podany jak na tacy. Mam na myśli stosowanie skomplikowanych algorytmów matematycznych trudnych do rozgryzienia dla kogoś z zewnątrz. Pomysł z captcha, nie jest zły. Następny pomysł to np: mierzenie odstępu czasu po stronie PHP np: od wejścia na stronę używająca AJAX-a do żądania do pliku AJAX-owego + sprawdzenie czy użytkownik odpalił w ogóle ten główny plik smile.gif
!*!
sniffer32 "sprawdzenie czy użytkownik odpalił w ogóle ten główny plik" ha! niby prosty banał a na to nie wpadłem winksmiley.jpg siła tkwi w prostocie jak to mówią... + za dodatkowy sposób (zawsze to o jeden więcej).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.