Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: filtracja danych wprowadzanych do bazy
Forum PHP.pl > Forum > PHP
robos85
Witam, jakich uzyć funkcji, aby dane wprowadzane do bazy poprze form były bezpieczne?

czytałem ze mysql_real_escape_string do zapisu do bazy uzywać.
a do wypisywania z bazy uzywac stripslashes co pozwoli na wypisanie tekstu bez slashy i wszystko będzie "bezpieczne"

Czy takie rozwiązanie pozwoli ochronić się przed atakami sql?
Siner
Na forum było dużo takich tematów, na google jeszcze więcej,
np http://www.webinside.pl/php/artykuly/197 (Filtracja danych)
robos85
Z tego co doczytałem się, filtracja poprzez addslashes / stripslashes daje bezpieczeństwo
robos85
czym one się różnia w praktyce?
devnul
pierwszy dostosowuje do kodowania użytego w aktualnym połączeniu zestaw znaków używany jako wzorzec dla escapowania, drugi używa wzorca ogólnego, pierwszy wymaga aktywnego połączenia z bazą drugi nie (można wykonywać escapowanie jeszcze przed nawiązaniem połączenia [mysql_connect/mysql_pconnect]) a dane wyjściowe czyli to co wyciągasz z bazy i ślesz użytkownikowi filtrowałbym pod kątem xss (można to oczywiscie robić także na etapie dodawania do bazy)
robos85
Pod katem XSS filtrujemy htmlspecialchars??

ale po dodaniu slash przy wyciąganiu i tak trzeba dac stripslashes inaczej będzie źle pokazywane.

Dobry trop czy raczej źle poszedłem ?
devnul
w pewnym sęsie tak - ale nie do końca google ->xss a zrozumiesz czym to jest a co do pytań o funkcje php to ich wszystkie właściwości opisane są w manualu
robos85
więc chyba już doczytałem.

Przy wstawianiu do bazy używać mysql_real_escape_string

Do wypisywania dawać stripslashes(strip_tags(...));

i jeszcze taki warunek dla magic_quotes_gpc

  1. <?php
  2.  ($content) : $content;
  3. ?>



dzieki temu uniknę sql injection oraz xss?
devnul
ja bym raczej sugerował wyłączyć zawsze na starcie magic quotes (po sprawdzeniu oczywiscie) a filtrować dane wedle potrzeby zawsze
robos85
Ale nie zawsze jest możliwość wyłączenia niestety:/

napisałem takie coś, jest bezpieczne?:

  1. <?php
  2. function val_in ($content) {
  3. $content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string ($content) : $content;
  4. return $content;
  5. }
  6.  
  7. function val_out ($content) {
  8. $content = strip_tags (stripslashes($content));
  9. return $content;
  10. }
  11. ?>
devnul
zawsze jest możliwość wyłączenia (jesli magic gpc jest włączone to filtruje tablice wejściowe get/post/cookie wywalając slashe i tym samym wyłączam gpc - dzieki temu nie musze później 100 razy sprawdzac tego czy jest włączony gpc czy nie a filtruję to co jest mi potrzebne
robos85
$content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string ($content) : $content;

To tego nie robi?
devnul
w pwenym sięsie tak ale nie do końca - poczytaj w manualu jakie znaki są escapowane przez mysql_real_escape_string a jakie przez magic quotes qpc
robos85
a możesz pokazać jakim ty kodem filtrujesz questionmark.gif
Będę wdzięczny
devnul
no już napisałem - zdejmujemy przez założone przez gpc (jesli są slashe)
  1. <?php
  2. array_walk_recursive($_POST,"gpc_prepare");
  3. array_walk_recursive($_GET,"gpc_prepare");
  4. array_walk_recursive($_COOKIE,"gpc_prepare");
  5. }
  6.  
  7. function gpc_prepare(&$value){
  8. $value=stripslashes($value);
  9. }
  10. ?>


a później czy to strip_tags czy htmlspecialchars, czy też odpowiednio przygotowanymi funckjami bazującymi na regexp czy innym w razie koniecznośi i w zależności od potrzeby filtruję dane
robos85
czyli moja funkcja zadziała prawidłowo na próbę ataku ?
devnul
jak już pisałem - czysto teorytycznie tak - w praktyce to zależy jeszcze od tego jak jej użyjesz i musisz zdawać sobie sprawę z tego jakie niedogodności niesie to za sobą
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.