Skocz do zawartości
  • 0

Walidacja formularza w PHP


producer
 Udostępnij

Pytanie

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ę 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

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

Edytowane przez grzesiomisio
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

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.

Potrzebujesz pomocy z hostingiem? Daj znać poprzez Telegram lub Priv!

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

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

Edytowane przez Nagasheek
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum Walidacja formularza w PHP   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...