Tema: ¿Es seguro?
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2014, 16:39
Avatar de iEnrique
iEnrique
 
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
¿Es seguro?

¡Hola a todos!

Me quería aseguridad de que el registro de usuarios que he hecho es totalmente seguro, para ello he utilizado mysqli con sentencias preparadas, además de unos sistemas de verificación contra ataques nuevos para mí.

He creado una función y algunas cosas que se me han ocurrido para todo esto, espero que esté bien seguro y si no lo está os agradecería que me añadierais algunos detalles si queréis por si se me ha saltado algo...

PD: La contraseña la encripto de forma segura con crypt() pero la he quitado para que no sepáis el algoritmo

Código PHP:
Ver original
  1. <?php
  2. $mysqli = new mysqli("localhost", "root", "", "redbuff");
  3. function clean($var, $type){
  4.     if($type == "interger"){
  5.         settype($var, "int");
  6.         $var = ereg_replace("[^0-9]", "", $var);
  7.     }elseif($type == "string"){
  8.         settype($var, "string");
  9.         $var = ereg_replace("[^a-zA-Z]", "", $var);
  10.     }elseif($type == "float"){
  11.         settype($var, "float");
  12.         $var = ereg_replace("[^0-9\-]", "", $var);
  13.     }elseif($type == "boolean"){
  14.         settype($var, "int");
  15.         $var = ereg_replace("[^0-9]", "", $var);
  16.     }elseif($type == "alpha"){
  17.         $var = ereg_replace("[^a-zA-Z0-9]", "", $var);
  18.     }
  19.     return $var;
  20. }
  21. $user = ''; $password = ''; $email = ''; $message = '';
  22. $user = clean($_GET['user'], "alpha"); $password = clean($_GET['password'], "none"); $email = ereg_replace("[^a-zA-Z0-9@\-_\.]", "", clean($_GET['email'], "none"));
  23. $sentencia = $mysqli->prepare("SELECT id FROM accounts WHERE user= ?");
  24. $sentencia->bind_param("s", $user);
  25. $sentencia->execute();
  26. $result = $sentencia->get_result();
  27. $num_user = $result->num_rows;
  28. $sentencia->close();
  29. $sentenciam = $mysqli->prepare("SELECT id FROM accounts WHERE email= ?");
  30. $sentenciam->bind_param("s", $email);
  31. $sentenciam->execute();
  32. $resultm = $sentenciam->get_result();
  33. $num_email = $resultm->num_rows;
  34. $sentenciam->close();
  35. if($num_user == 0 && $num_email == 0 && $user != '' && $password != '' && $email != ''){
  36.     $insertuser = $mysqli->prepare("INSERT INTO accounts(user, password, email) VALUES(?, ?, ?)");
  37.     $insertuser->bind_param('sss', $user, $password, $email);
  38.     $insertuser->execute();
  39.     $intertuser->close();
  40. }else{
  41.     if($email == '' || $user == ''){
  42.         $_SESSION['error'] = 'Te faltan datos';
  43.     }elseif($num_email == 0){
  44.         $_SESSION['error'] = 'Ese email ya existe';
  45.     }elseif($num_user == 0){
  46.         $_SESSION['error'] = 'Ese usuario ya existe';
  47.     }
  48. }
  49. //Fin del archivo

Muchas gracias,
Enrique.