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%)
-----


Taka mała ciekawostka o e-mailach, akurat ostatnio podczas testów jednostkowych na to trafiłem.

Cytat
RFC 2822:

...the local-part of the e-mail may use any of these ASCII characters:

* Uppercase and lowercase letters
* The digits 0 through 9
* The characters,! # $ % & ' * + - / =? ^ _ ` { Ś } ~
* The character "." provided that it is not the first or last character in the local-part.

Kolega wspominał o issetach ponieważ PHP rzuci notice, jeżeli odwołamy się do nieistniejącego indeksu lub zmiennej

Co do ograniczania ilości znaków hasła nie widzę zbytniego sensu.
Nie sądzę, aby wyliczenie hasha było jakoś tragiczne w skutkach dla serwera, gdybyśmy mieli hashować dłuższe ciągi znaków, jak dla mnie to już lekka paranoja.
Poniższy przykład wykona się w mgnieniu oka.

  1. for ($i = 0; $i < 1000; $i++) {
  2. $random_num = mt_rand(1, 9);
  3. $string = str_repeat($random_num, 80);
  4. echo md5($string)."\n";
  5. }


Ten post edytował reptile_rex 1.02.2013, 22:15:02
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 18:32