Skocz do zawartości
producer

Walidacja formularza w PHP

Polecane posty

Witam wszystkich, mam mały problem odnośnie walidacji formularza rejestracyjnego

Zrobiłem plik register.php który posiada w sobie formularz rejestracyjny:

 

Spoiler
?php

					echo '
					<form method="POST" action="reg1.php">
				
					<center>
						<p><input type="text" name="login" placeholder="Login" maxlength="30"/></p>
						<p><input type="password" name="password1" placeholder="Password"  maxlength="48"/></p>
						<p><input type="password" name="password2" placeholder="Password Ponownie" maxlength="48" /></p>
						<p><input type="text" name="email" placeholder="E-mail"/ maxlength="30" ></p>
						
						<p><input type="submit" value="Register"></p>
						
					</center>

				</form>
				';
				
				
			?>

 

 

 

Jeżeli wprowadzimy dane przekieruje do pliku reg1.php który odpowiada za połączenie z baza danych oraz wysłanie zapytań

na początku pobieram dane  

$password1 = $_POST['password1'];

tak samo jest z password2 , login, email, później sprawdzam czy podany login nie jest już w bazie

$zapytanie4 = 'SELECT * FROM user WHERE login = "'.$login.'" ';
			$wynik4 = mysqli_query($connect, $zapytanie4);
			$user4 = mysqli_fetch_row($wynik4);
			if ($user4 > 1) {
				echo "Login juz istnieje";
			} else {
			// Dalszy kod jeżeli login jest poprawny}

 

teraz chciałbym się dowiedzieć jak zrobić dobrą walidacje, aby zabezpieczyć przed atakami i spełniała warunki: 

login : wszystkie wielkości znaków, max znaków 30, tylko znaki białe 

hasło: wszystkie wielkości znaków, max znaków 30, znaki białe i znaki specjalne

email: tylko postać maila np "[email protected]"

 

Za pomoc bardzo dziękuję 

 

 

Udostępnij ten post


Link to postu
Pani Kasia

Lepiej się uczyć szukając samemu ;) Więcej wtedy zostaje w głowie.

 

Jeżeli  mimo to będziesz miał w dalszym ciągu problem to mnie oznacz, a postaram się wytłumaczyć (ale obowiązkowo dołącz komentarz co zrobiłeś i co nie działa) ;)

 

E-mail:
http://php.net/manual/en/filter.examples.validation.php

Hasło/login:

https://stackoverflow.com/questions/6182846/enforcing-password-requirements

Udostępnij ten post


Link to postu

Plus warto dodać, żeby zabezpieczać zapytania przed SQL Injection - zamieniając to 

'SELECT * FROM user WHERE login = "'.$login.'" ';

na to : 

$zapytanie4 = 'SELECT * FROM user WHERE login = "'.htmlspecialchars($login).'" ';

//Lub inne, bardziej bezpieczne rozwiązanie - korzystanie z "prepared statement"

$db = new PDO('mysql:host=localhost...'); // Tworzenie polaczenia PDO dla MySQL
$query = $db->prepare('SELECT * FROM user WHERE login = :value ;'); // Przygotowanie zapytania
$query->bind(':value', $login, PDO::PARAM_STR); // Postawienie wartości 
$query->execute(); // Uruchomienie zapytania

Więcej doczytasz w manualu - szukaj PDO w google etc.  

Ogólnie także polecam jakiś walidator po stronie front-end. Możesz użyć na przykład takiej biblioteki Validate.js

Edytowano przez grzesiomisio

Udostępnij ten post


Link to postu

Tak jak kolega wyżej napisał - walidacja poprzez PDO spełnia podstawowe role, bo ta pierwsza wersja dosłownie pozwala na SQL Injection i to bez problemu :)

Walidację wykonuj po obu stronach, front i backend, by zapobiec głupocie użytkownika, a także błędów w zapytaniu.

Udostępnij ten post


Link to postu

nie istnieje pojecie jak walidacja PDO, bo PDO nie waliduje tych danych, na upartego mozna powiedziec, ze je sanityzuje (przy emulated prepared statements)

 

co do samej ochrony przed sql injection to faktycznie korzystanie z prepared statements (i ta wersja emulowana domyslnie przy korzystaniu z API PDO i ta na poziomie samego mysqla - ta `faktyczna`) jest wystarczajace. Jedynie roznica jest na jakim poziomie parametry do zapytan są bindowane. PDO::ATTR_EMULATE_PREPARES wiaze parametry na poziomie bilbioteki przy fladze true, przy false robi to na poziomie systemu db)

 

z tym, ze zagrozenie z formularzy to nie tylko sqlinjection, a chocby ataki xss i tutaj juz zalezy od koncepcji, bo mozna te dane sanizytowac przed persistem do bazy, albo przyjmowac dane surowe i przy widoku po prostu je filtrowac (czego jestem zwolennikiem)

 

a co samej walidacji danych, jezeli nie chcesz pisac czegos na nowo to bardzo polecam:

https://symfony.com/doc/current/components/validator.html

Edytowano przez Nagasheek

Udostępnij ten post


Link to postu

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.


×