Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]Zapytanie o bezpieczeństwo
Forum PHP.pl > Forum > Przedszkole
uirapuru
To takie bardzo sztywne rozwiązanie dla "kontrolera" ajax, ale z ciekawosci chciałem zapytać, czy widzicie jakieś jego "dziury"?

  1. if(isset($_POST["q"])) {
  2. $request = $_POST;
  3. } else {
  4. $request = $_GET;
  5. }
  6.  
  7. if(!isset($request["q"])) {
  8. die();
  9. }
  10.  
  11. switch($request["q"]) {
  12. case "kontakt":
  13. case "naszemenu":
  14. case "lokalizacja":
  15. case "galeria":
  16. $dzial = $request["q"]; break;
  17. default: $dzial = "kontakt";
  18. }
  19.  
  20. $plik_dzial = "txt/".$dzial.".txt";
  21.  
  22. /* JEDZIEMY Z KOKSEM */
  23.  
  24. if(file_exists($plik_dzial)) {
  25. $handle = fopen($plik_dzial, "r");
  26. $tresc = fread($handle, filesize($plik_dzial));
  27. fclose($handle);
  28.  
  29. header('Content-type: text/html; charset=iso-8859-2');
  30. echo $tresc;
  31. } else {
  32. header("HTTP/1.0 404 Not Found");
  33. }
potreb
Co to?
  1. if(isset($_POST["q"])) {
  2. $request = $_POST;
  3. } else {
  4. $request = $_GET;
  5. }


Równie dobrze mogę dodać zmienną POST jako GET, w tym wypadku włączasz register globals
uirapuru
wydaje mi się że moje rozwiązanie jest mniej ryzykowne niż register_globals - co sobie możesz podać w post lub get co mi może zaszkodzić ?
Zyx
Register_globals powinno być bezwzględnie wyłączone, a jeśli nie - skrypt powinien być zabezpieczony przed jego włączeniem. Przepisywanie zmiennych superglobalnych jest bez sensu, ponieważ istnieje coś takiego, jak $_REQUEST.
batman
~Zyx
Pamiętaj, że oprócz GET i POST w tablicy REQUEST może znaleźć się kilka innych niechcianych danych. A jak wiadomo, jeśli jakieś dane się powtórzą, wówczas w zależności od konfiguracji, GET lub POST mogą zostać nadpisane.

~uirapuru
Dodaj jeszcze sprawdzenie nagłówka pod kątem ajax-a.
  1. if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
  2. header("HTTP/1.0 404 Not Found");
  3. }


No i nie die(), tylko header 404. Po co robot ma wiedzieć, że jest jakiś skrypt.
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.