Filtrowanie danych w PHP i ich weświetlanie

0

Witam serdecznie,
naczytałem się ostatnio o bezpieczeństwie skryptów PHP i możliwościach ataku na mysql.

Chce się zabezpieczyć przed różnego rodzaju atakami wprowadzając takie zabezpieczenie:

	function baza_zapis($string)	////// zapis do bazy
		{ 
			$string = trim(htmlspecialchars(addslashes($string), ENT_QUOTES));
			return $string;
		}

	function baza_odczyt($string)	/////// odczyt z bazy
		{ 
			$string = htmlspecialchars_decode(stripslashes($string));
			return $string;
		}

Myślicie że to wystarczy (do zapisu/odczytu z bazy)?

Rozwiązanie to ma 1 wadę. Po wpisaniu w inputa znaku: " zapisze się w bazie:" - więc ok.
Ale jak wyświetlam to w inpucie, to nie widać tych znaczków w przeglądarce :( dopiero w źródle widać:
value ="""""""""""&quot" - macie może jakiś sposób na to?

Northwet

0

co od mysql, to jest funkcja

 mysql_real_escape_string(string,connection) 

natomiast co do pytania czy wystarczy (oraz czy to nie nadmiar) oraz co kiedy zastosować, to zależy co dokładnie robisz z tym stringiem

0

Stosuj addslashes() jak wyświetlasz coś w inpucie, wtedy wartość nie ucieknie poza cudzysłowy.

0

Przede wszystkim: wylacz opcje magic_quotes_gpc oraz magic_quotes_runtime (domyslnie sa wylaczone).

Musisz sie zastanowic czy chcesz filtrowac dane na poziomie zapisu do bazy danych - czy odczytu. Moim zdaniem lepiej jest filtrowac od razu przy zapisie do bazy. Dzieki temu nie musisz kazdorazowo ich filtrowac przy wyswietlaniu (wydluza czas generowania strony). Ale zastanow sie czy nie bedziesz potrzebowal w przylosci "czystych", nieprzefiltrowanych danych.

Przykladowo: w serwisie 4programmers.net filtrowanie niektorych elementow (np. forum) odbywa sie na poziomie wyswietlania watkow na forum. Dzieki temu w przyszlosci mozemy rozszerzyc np. liste dozwolonych znacznikow HTML na forum. Albo filtrowac posty inaczej - w zaleznosci od usera, ktory jest autorem danego watku/postu.

Jezeli chcesz filtrowac na poziomie zapisu, uzyj funkcji htmlspecialchars() tak jak napisales. Lecz przy odczycie, zapisanych juz danych w <input> nie musisz korzystac z htmlspecialchars_decode().

1 użytkowników online, w tym zalogowanych: 0, gości: 1