Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Filtrowanie danych : /
Forum PHP.pl > Forum > Przedszkole
porywacz
Witam, napisałem stronę ze skryptem na includach. A dokładniej to ten skrypt sprawdza czy istnieje zmienna w tablicy get o nazwie 'subtopic' oraz czy ta zmienna zawiera na przykład 'kody'. Jeżeli warunki zostaną spełnione to skrypt includuje treść z pliku include_kody.php i wyświetla zawartość na stronie. Moje pytanie jest następujące, czy ten skrypt jest bezpieczny? Jak filtrować dane wyciągane z tablicy get?
SKRYPT:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  4. <head>
  5. <title>xCheats - Home</title>
  6. <meta http-equiv="Content-Type" content="html/text" charset=utf-8" />
  7. <link rel="Stylesheet" type="text/css" href="style.css"/>
  8. </head>
  9. <body>
  10. <?php
  11. include('header_include.php');
  12. ?>
  13.  
  14. <div id="center">
  15. <div id="center_left"></div>
  16. <div id="center_center">
  17. <p style="margin:15px;">
  18.  
  19. <?php
  20. if(!isset($_GET['subtopic'])) {
  21. include('home_include.php');
  22. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'kody') {
  23. include('sub_kody.php');
  24. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'dodaj_kody') {
  25. include('sub_dodajkody.php');
  26. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'szukaj_kody') {
  27. include('sub_szukajkody.php');
  28. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'onas') {
  29. include('sub_onas.php');
  30. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'kontakt') {
  31. include('sub_kontakt.php');
  32. } elseif(isset($_GET['subtopic']) && $_GET['subtopic'] == 'rejestracja') {
  33. include('rejestracja_include.php');
  34. }
  35. ?>
  36.  
  37. </p>
  38. </div>
  39.  
  40. <?php
  41. include('menu_right_include.php');
  42. include('footer_include.php');
  43. ?>
  44. </body>
  45. </html>

I nie chodzi mi tylko o ten skrypt. Chciałbym dowiedzieć się więcej na temat bezpieczeństwa, więc proszę o linki do poradników, tutów itd na temat jak stosować ten tak zwany escaping ^^
Bardzo proszę o pomoc smile.gif Dodam też, że dopiero od niedawna interesuje się programowaniem w php, więc proszę o dość "przejrzyste" odpowiedzi smile.gif
tolomei
Witaj.

Przy warunkach if ... elseif ... elseif zostanie wykonany ten blok poleceń, który jako pierwszy będzie prawidłowy, a reszta zostanie pominięta.
Tak więc, gdy Twoja zmienna $_GET['subtopic'] będzie istniała to zostanie wykonany pierwszy blok if, a reszta pominięta.
Mówiąc jeszcze prościej - Twoje elseif-y nie wykonają się nigdy.

Co do ładowania podstron - jest to bezpieczne w takim formacie.
Niestety nie jest to zbyt wydajne - wyobraź sobie 1000 podstron w Twoim serwisie.

Możesz utworzyć automatyczne ładowanie plików.
W takim wypadku trzeba porządnie filtrować zmienną, z której pobiera się dane pliku do includowania.

Przykład:
  1. if(isset($_GET['subtopic'])) {
  2. // odfiltrowujemy wszystko co nie jest wielką/małą literą(bez polskich znaków), cyfrą lub podkreślnikiem
  3. $subtopic = preg_replace('#\W#', '', $_GET['subtopic']);
  4. if(file_exists('sites/'.$subtopic.'.php')) {
  5. include('sites/'.$subtopic.'.php');
  6. } else {
  7. include('sites/index.php');
  8. }
  9. }


Pozdrawiam.
porywacz
Nie rozumiem czemu moje elseify się niby mają nie wykonać? biggrin.gif
link do zakodowanej strony: www.porywacz.onuse.pl/czitypl/index.php
Wszystko działa jak należy. W linkach w menu dodałem do adresu poszczególne nazwy zmiennych na przykład www.porywacz.onuse.pl/czitypl/index.php?subtopic=kody i wszystko działa jak należy.
Pisałem ten skrypt więc chyba wiem jak działają elseif biggrin.gifD
Co do twojego skryptu nie wiele rozumiem ale poduczę się jeszcze php i poczytam trochę o funkcjach, które przedstawiłeś. Jeżeli mój sposób jest w miarę bezpieczny i poprawny to dziękuję za pomoc smile.gif
Przydałby się jeszcze jakiś poradnik jak filtrować dane pobierane i zapisywane z bazy danych, bo jest to chyba najbardziej podatne na ataki sql injection. Wielokrotnie pytałem już wujka google lecz niczego nie znalazłem ;(
Pozdrawiam smile.gif
crocodillo
Cytat(porywacz @ 31.03.2012, 11:02:06 ) *
Przydałby się jeszcze jakiś poradnik jak filtrować dane pobierane i zapisywane z bazy danych, bo jest to chyba najbardziej podatne na ataki sql injection. Wielokrotnie pytałem już wujka google lecz niczego nie znalazłem ;(

To coś się nie dogadujecie chyba z wujkiem: "php sql injection prevention", "php zabezpieczenie przed sql injection"
tolomei
Och... nie zauważyłem negacji w pierwszym warunku - mój błąd smile.gif

Jak pytałeś wujka i nic Ci nie powiedział to chyba musi szczególnie Cię nie lubić.
O SQL Injection jest wiele wiele artykułów.

http://www.poradnik-webmastera.com/artykul...l_injection.php
http://4programmers.net/PHP/Ochrona_przed_...tion_-_podstawy
http://niebezpiecznik.pl/post/przewodnik-p...eveloperow-php/ <-- prezentacja

Poczytaj także o XSS. Wujek prawdę Ci powie(prawie zawsze) wink.gif.
porywacz
W takim razie bardzo dziękuję za pomoc smile.gif
Temat można już zamknąć, chyba, że ktoś jeszcze chce się podzielić ze mną istotnymi informacjami snitch.gif

Aha i jeszcze mam jeden mały problem biggrin.gif U mnie wyświetla polskie znaki a u innych nie ohmy.gifO Znaczy nie wiem czy u wszystkich ale paru kolegom nie wyświetla ohmy.gif
Nie wiem co może być nie tak, kodowanie jest ustawione na utf-8 ;/
tolomei
Trzeba pamiętać o formacie zapisu pliku.
Plik powinien także mieć kodowanie utf-8.
Najlepiej ściągnąć Notepad++ i tam ustawić kodowanie na "UTF8 bez BOM".
Windowsowy notatnik zapisze plik w formie ANSI co powoduje krzaczki.
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.