Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rejestracja użytkowników
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


Napisałem sobie skrypt który zapisuje mi użytkowników do bazy danych.Zastanawiam się nad jego bezpieczeństwem moglibyście rzucić okiem ?

Proszę, bo naczytałem się w internecie: zawsze addslashed i htmlspecialchars(), moża też spotkać coś takiego :
$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES); <- tworzenie takiego czegoś dla hasła kompletnie go zmieni.

Przeglądałem i zastanawiałem się nad moim kodem wiele razy, według mnie nie ma żadnej luki.Ale nie daje mi to spokoju.

  1. if( $this->ajax ){
  2. $email = $_POST['email'];
  3. $password = $_POST['password'];
  4. $recaptcha = $_POST['recaptcha'];
  5. $challenge = $_POST['challenge'];
  6.  
  7. $recaptchaOK = false;
  8. if( !empty($recaptcha) && !empty($challenge) ){
  9. require_once('phpClass/recaptcha.php');
  10. $privatekey = '6Lfn8tsSAAAAALtc6Ny******************';
  11. $resp = recaptcha_check_answer ($privatekey,$_SERVER["REMOTE_ADDR"],$challenge,$recaptcha);
  12. $recaptchaOK = ( $resp->is_valid ) ? true : false ;
  13. }
  14.  
  15. $passwordOK = false;
  16. if( !empty($password) && strlen($password) < 40 ){
  17. require_once('phpClass/phpass.php');
  18. $hasher = new PasswordHash(8, TRUE);
  19. $password = $hasher->HashPassword($password);
  20. $passwordOK = ( strlen($password) >= 20 ) ? true : false ;
  21. }
  22.  
  23. $emailOK = false;
  24. if( !empty($email) ){
  25. $emailOK = ( preg_match('/^[0-9a-zA-Z_.-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,3}$/', $email) === 1 ) ? true : false ;
  26. $emailTaken = sql::qq('SELECT `id` FROM `user` WHERE `email`=? ','s',array($email));
  27. $emailTaken = ( $emailTaken ) ? true : false ;
  28. }
  29.  
  30. if( !$emailTaken && $emailOK && $passwordOK && $recaptchaOK ){
  31. $sqlR = sql::qq('INSERT INTO `user` (`email`,`password`) VALUES (?,?)','ss',array($email,$password));
  32. $this->body = array('status'=>true);
  33. }else{
  34. if( !$recaptchaOK ) $error['wrongRecaptcha']= $this->l('wrongRecaptcha');
  35. if( $emailTaken ) $error['takenEmail']= $this->l('takenEmail');
  36. if( !$emailOK ) $error['wrongEmail']= $this->l('wrongEmail');
  37. if( !$passwordOK ) $error['wrongPassword']=$this->l('wrongPassword');
  38. $this->body = array('status'=>false,'info'=>$error);
  39. }
  40. }else{
  41. error::NotAJAX();
  42. }


/---------------------------------
przepraszm za dziwne tab'y. Ten edytor coś wyzmieniał mi dlatego jest nieczytelnie.

Ten post edytował tadeurz 1.02.2013, 16:51:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
reptile_rex
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 2
Dołączył: 8.06.2007

Ostrzeżenie: (0%)
-----


Wszystko zależy jakiego używamy algorytmu hashowania.
Jak widzę używasz jakiejś zewnętrznej klasy, która może być mało wydajna.

Wiadomo że natywne funkcje md5 / sha1 <-- (nie polecam ich już używać do haseł) będą szybsze od tego i bardziej wydajne.

Polecam używanie hash('sha256', $string); lub hash('sha512', $string); + Sól

Zarówno sha512 jak i sha256 należą do SHA2, którego aktualnie powinno się używać.
Ze względu na długość otrzymanego hasha zmniejsza się możliwość kolizji

Jest także SHA3 (2012 rok), ale PHP chyba tego nie zaimplementował.

Pozdrawiam

Ten post edytował reptile_rex 2.02.2013, 15:26:35
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 16:31