robos85
4.01.2008, 21:22:54
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
4.01.2008, 21:49:29
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
4.01.2008, 22:47:17
Z tego co doczytałem się, filtracja poprzez addslashes / stripslashes daje bezpieczeństwo
devnul
5.01.2008, 00:00:18
robos85
5.01.2008, 00:58:28
czym one się różnia w praktyce?
devnul
5.01.2008, 01:32:58
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
5.01.2008, 01:39:27
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
5.01.2008, 01:43:36
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
5.01.2008, 14:30:34
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
<?php
($content) : $content;
?>
dzieki temu uniknę sql injection oraz xss?
devnul
5.01.2008, 14:55:04
ja bym raczej sugerował wyłączyć zawsze na starcie magic quotes (po sprawdzeniu oczywiscie) a filtrować dane wedle potrzeby zawsze
robos85
5.01.2008, 15:03:10
Ale nie zawsze jest możliwość wyłączenia niestety:/
napisałem takie coś, jest bezpieczne?:
<?php
function val_in ($content) {
return $content;
}
function val_out ($content) {
return $content;
}
?>
devnul
5.01.2008, 15:34:04
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
5.01.2008, 15:39:44
$content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string ($content) : $content;
To tego nie robi?
devnul
5.01.2008, 15:43:10
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
5.01.2008, 15:53:26
a możesz pokazać jakim ty kodem filtrujesz

Będę wdzięczny
devnul
5.01.2008, 16:31:11
no już napisałem - zdejmujemy przez założone przez gpc (jesli są slashe)
<?php
array_walk_recursive($_POST,"gpc_prepare");
array_walk_recursive($_GET,"gpc_prepare");
array_walk_recursive($_COOKIE,"gpc_prepare");
}
function gpc_prepare(&$value){
}
?>
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
17.01.2008, 12:48:08
czyli moja funkcja zadziała prawidłowo na próbę ataku ?
devnul
18.01.2008, 00:15:59
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.