Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Access][MySQL][PHP] Zabezpieczenia
Forum PHP.pl > Forum > Przedszkole
rafor4
Siemka. Mam pytanie. Czy dobrze zabezpieczyłem skrypt rejestracji przed ewentualnymi atakami ?

  1. if ($_POST['klasa']==1){
  2. if (empty($_POST['login']) || empty ($_POST['klasa']) || empty($_POST['haslo']) || empty($_POST['email'])) echo 'Wypełnij wszystkie pola!';
  3. else
  4. {
  5. $login = htmlspecialchars(strip_tags($_POST['login']));
  6. $login2 = htmlspecialchars(strip_tags($_POST['login']));
  7. $klasa = htmlspecialchars(strip_tags($_POST['klasa']));
  8. $haslo = htmlspecialchars(strip_tags($_POST['haslo']));
  9. $email = htmlspecialchars(strip_tags($_POST['email']));
  10. if (!ctype_alnum($login) ) echo 'To nie jest poprawna nazwa użytkownika!';
  11. else if (! filter_var($email,FILTER_VALIDATE_EMAIL) ) echo 'To nie jest poprawny email!';
  12. else
  13. {
  14. if (row("SELECT id FROM users WHERE login = mysql_real_escape_string($login) OR email='.mysql_real_escape_string($email).'") ) echo 'Nazwa użytkownika/email jest już zajęta';
  15. else
  16. {
  17. addslashes(mysql_query("INSERT into users (login,haslo,email,klasa) VALUES ('$login',md5('$haslo'),'$email','$klasa')"));
  18. addslashes(mysql_query("INSERT into statystyki (login2,sila,szybkosc,inteligencja,zrecznosc,wytrzymalosc,uniki,obrazenia) VALUES ('$login2','9','5','6','4','7','4','25')"));
  19. echo 'Konto zostało założone!<br>';
  20. echo '<br>Zostałeś Wojownikiem!';
  21. echo '<br><a href="index.php">-Powrot</a><br> ';
  22. }
  23. }
  24. }
  25. }


Kiedy przy dodawaniu zmiennych do bazy tutaj:
  1. addslashes(mysql_query("INSERT into users (login,haslo,email,klasa) VALUES ('$login',md5('$haslo'),'$email','$klasa')"));


zamiast '$login' wpisuję '.mysql_real_escape_string($login).' wtedy do bazy zapisuje się np. .mysql_real_escape_string(maselko492). Nie wiem czy jest to potrzebne, gdy już wcześniej zmienną login przefiltrowałem na obecność kodu php i html, jednak proszę o poradę wink.gif
CuteOne
1. addslashes(mysql_query( a co to za dziwadło... dodajesz slashe do TRUE/FALSE ?

  1.  
  2. $login = mysql_real_escape_string($login);
  3. $email = mysql_real_escape_string($email);
  4. $klasa = mysql_real_escape_string($klasa);
  5.  
  6. mysql_query("INSERT INTO users (login,haslo,email,klasa) VALUES ('$login',md5('$haslo'),'$email','$klasa')");


2. SELECT id FROM users WHERE login = mysql_real_escape_string($login) jest kodem PHP nie mysql, więc używaj go tak jak w pkt 1

3. Usuwanie html itp. używa się przy wyświetlaniu danych
rafor4
  1. if ($_POST['klasa']==1){
  2. if (empty($_POST['login']) || empty ($_POST['klasa']) || empty($_POST['haslo']) || empty($_POST['email'])) echo 'Wypełnij wszystkie pola!';
  3. else
  4. {
  5. $login = mysql_real_escape_string($login);
  6. $klasa = mysql_real_escape_string($klasa);
  7. $haslo = htmlspecialchars(strip_tags($_POST['haslo']));
  8. $email = mysql_real_escape_string($email);
  9. if (!ctype_alnum($login) ) echo 'To nie jest poprawna nazwa użytkownika!';
  10. else if (! filter_var($email,FILTER_VALIDATE_EMAIL) ) echo 'To nie jest poprawny email!';
  11. else
  12. {
  13. if (row("SELECT id FROM users WHERE login = mysql_real_escape_string($login) OR email='.mysql_real_escape_string($email).'") ) echo 'Nazwa użytkownika/email jest już zajęta';
  14. else
  15. {
  16. mysql_query("INSERT into users (login,haslo,email,klasa) VALUES ('$login',md5('$haslo'),'$email','$klasa')"));
  17. mysql_query("INSERT into statystyki (login2,sila,szybkosc,inteligencja,zrecznosc,wytrzymalosc,uniki,obrazenia) VALUES ('$login2','9','5','6','4','7','4','25')"));
  18. echo 'Konto zostało założone!<br>';
  19. echo '<br>Zostałeś Wojownikiem!';
  20. echo '<br><a href="index.php">-Powrot</a><br> ';
  21. }
  22. }
  23. }
  24. }


Czyli jak jest tak to skrypt jest zabezpieczony tak ? Nie za bardzo zrozumiałem to 2.
rafor4
Sory, że 2 post ale nie moge edytować. Czytałem, że addslashes() powinno się dawać przed dodawaniem jakiś rekordów do bazy, tylko nie miałem pojęcia jak to użyć ;p
Do tego $haslo = htmlspecialchars(strip_tags($_POST['haslo']));
też ma być mysql_real_escape_string($_POST['haslo'])); ?
rafor4
Czyli jeśli jest np. zmienna:
$gracz = mysql_query("SELECT * FROM users WHERE id=$_SESSION[id]");
Nie trzeba stosować żadnych zabezpieczeń ? Tzn. czy są one potrzebne, gdy wywołujemy dane z bazy.
rafor4
Refresh
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.