Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zabezpieczenie danych odbieranych przez formularz
Forum PHP.pl > Forum > Przedszkole
dudi1261
Witam,
poszukuje odpowiedzi na pytanie "Jak dobrze zabezpieczyć dane odbierane przez formularz php?". Napisalem do mojego systemu cms, ktory jest tworzony pod moj blog taki "zestaw":
Kod
htmlspecialchars(strip_tags(mysql_real_escape_string($_POST['cos'])))


Czy zabezpieczy on w pelni moj blog przed atakami hackerow (SQL INJ itd.)?
zbig992
mysql_real_escape_string() zabezpieczy przed SQL Injection
strip_tags() i htmlspecialchars() przed XSS

poza tym możesz dodatkowo filtrować różne dane pod kątem tego, czego na pewno nie powinno w nich być (na przykład spodziewasz się liczby a ktoś poda Ci tekst)
CuteOne
strip_tags() i htmlspecialchars() przed XSS.... dodam od siebie, że tych funkcji używasz jedynie podczas wyświetlania danych przesłanych z formularza
dudi1261
Cytat(zbig992 @ 7.10.2010, 22:59:36 ) *
mysql_real_escape_string() zabezpieczy przed SQL Injection
strip_tags() i htmlspecialchars() przed XSS

poza tym możesz dodatkowo filtrować różne dane pod kątem tego, czego na pewno nie powinno w nich być (na przykład spodziewasz się liczby a ktoś poda Ci tekst)


Wiem. W tym celu uzywam (int) i w instrukcjach warunkowych is_numeric().


Cytat(CuteOne @ 7.10.2010, 23:13:21 ) *
strip_tags() i htmlspecialchars() przed XSS.... dodam od siebie, że tych funkcji używasz jedynie podczas wyświetlania danych przesłanych z formularza


Wydaje mi sie, ze przy zmiennej globalnej $_GET, takze powinienem to stosowac, np. przy sprawdzaniu czy podany kod aktywujący adres email w newsletterze jest poprawny. Prawda?
Fifi209
Cytat(dudi1261 @ 8.10.2010, 15:08:56 ) *
Wydaje mi sie, ze przy zmiennej globalnej $_GET, takze powinienem to stosowac, np. przy sprawdzaniu czy podany kod aktywujący adres email w newsletterze jest poprawny. Prawda?


A będziesz go gdzieś wyświetlał?
Ulysess
ja mam zwyczaj używania ABS zamiast int.. czasem bywa tak że liczba musi być dodatnia a w przypadku gdy osoba wpisze ujemną zamiast w zapytaniu np $a-$b wykona się $a+$b i jest psikus
dudi1261
Cytat(fifi209 @ 8.10.2010, 15:10:37 ) *
A będziesz go gdzieś wyświetlał?


Tylko wykonywal zapytanie do bazy danych. Ale z ciekawosci jesli chcialbym wyswietlic to co sie stanie?



Cytat(Ulysess @ 8.10.2010, 15:21:15 ) *
ja mam zwyczaj używania ABS zamiast int.. czasem bywa tak że liczba musi być dodatnia a w przypadku gdy osoba wpisze ujemną zamiast w zapytaniu np $a-$b wykona się $a+$b i jest psikus


Czyli (abs)$zmienna ?



Zauwazylem takze, ze is_numeric sprawdza tylko czy w ciagu znajduje sie cyfra.

Zeby tak nie bylo powinno wystarczyc uzywanie is_int(), prawda?

Ulysess
abs($zmienna)
dudi1261
Zatem abs($zmienna) sprawdza czy w $zmienna znajduje sie cyfra/y, zezwala na "." oraz na "-", a w is_numeric($zmienna), sprawdza czy w $zmienna znajduje się tylko cyfra 1-9 bez zadnych innych znakow smile.gif
Ulysess
poczytaj , posprawdzaj sam jak co działa..
funkcja abs jest modułem więc każda liczba która w niej się znajdzie staje się dodatnią , jeśli wprowadzisz jakiś sting = 0 , funkcja o ile sie nie myle służy do liczb rzeczywistych
Fifi209
Cytat(dudi1261 @ 8.10.2010, 15:23:21 ) *
Tylko wykonywal zapytanie do bazy danych. Ale z ciekawosci jesli chcialbym wyswietlic to co sie stanie?

Jeżeli do bazy to starczy mysql_real_escape_string

Co do wyświetlania, uchroniłbyś się przed XSS.
dudi1261
fifi209, mysle ze dobrze jest miec taki nawyk bo zabezpieczac sie przed XSS i SQL INJ winksmiley.jpg Nie wiadomo, czy bedzie nam pozniej potrzebne wyswietlanie jakiejs informacji, a przy 1000 liczbie rekordow to nie przyjemne zajecie smile.gif

Sprawdze jeszcze te funkcje dot. cyfr smile.gif
Ulysess
hmm abs jest dobry jeśli np w linku w zmiennej get ma być zawsze liczba lub np po wprowadzeniu przez USERa danych liczbowych są jakieś obliczenia robione
Fifi209
Cytat(dudi1261 @ 8.10.2010, 19:27:51 ) *
fifi209, mysle ze dobrze jest miec taki nawyk bo zabezpieczac sie przed XSS i SQL INJ winksmiley.jpg Nie wiadomo, czy bedzie nam pozniej potrzebne wyswietlanie jakiejs informacji, a przy 1000 liczbie rekordow to nie przyjemne zajecie smile.gif

Co ma liczba rekordów do wstawienia jednej funkcji w pętli? Może być i milion rekordów... winksmiley.jpg Najlepiej nawal wszędzie funkcji a potem zastanawiaj się gdzie musisz zoptymalizować swój kod.
dudi1261
Chyba mnie nie zrozumiales. Mowie o tym zeby przefiltrowac dane przy ich wprowadzaniu do bazy niz przy wyswietlaniu wprowadzac str_replace i zamieniac wszystko co mogli zlego wprowadzic uzytkownicy. Np. <b>NICK UZYTKOWNIKA</b> i wtedy ich nick bedzie pogrubiony i sobie pomysla ze sa chytrzy ;d
Ulysess
chce miec <h1>nick</h1> to niech ma , twoim zadaniem jest zeby taki nick mogl miec a przy okazji byl bezpeczny dla twojej strony
dudi1261
Ale wtedy bedzie sie wyswietlalo wg kodu html czyli wykona sie cos, a nie wyswietli tak jak teraz napisales
Ulysess
dlatego Twoim zadaniem jest przetrzymywanie nicku który chcial mieć użytkownik a zarazem filtrować tak żeby on widział swój nick a jeśłi jest niebezpieczny czyli ma TAGi html lub inne żeby się nie wykonał. -> owca cała i wilk syty ;p
dudi1261
a Jak wyswietlic tagi html nie interpretujac ich?
Ulysess
O.o.. w 1 poście sam napisałeś -> htmlspecialchars .
używasz funkcji nie sprawdzając jak działają questionmark.gif .....
dudi1261
o.O Zapomnialem haha.gif. ale wydaje mi sie ze bylo cos w html, co nie pozwalalo na wykonanie w tym tagu innych tagow.
bełdzio
Cytat(dudi1261 @ 7.10.2010, 21:23:03 ) *
Kod
htmlspecialchars(strip_tags(mysql_real_escape_string($_POST['cos'])))

mysql_real_escape_string daj na sam początek

Cytat(CuteOne @ 7.10.2010, 23:13:21 ) *
strip_tags() i htmlspecialchars() przed XSS.... dodam od siebie, że tych funkcji używasz jedynie podczas wyświetlania danych przesłanych z formularza


pytanie po co trzymać w bazie tagi, których będziemy pozbywać się podczas wyświetlania - zwykła nadmiarowość danych smile.gif

popatrz sobie też na PDO i możliwość bindowania parametrów
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.