Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Vaagish en 3 Diciembre 2014, 22:57 pm



Título: Seguridad Login-Registro PHP/MySql
Publicado por: Vaagish en 3 Diciembre 2014, 22:57 pm
Hola!

Estoy realizando una web del estilo compra/venta y aunque me manejo relativamente bien en la programación web, no tengo tanta experiencia formada..

Me gustaría leer de otros usuarios mas experientes, cuales son los mejores métodos para tener un registro y un login seguro en PHP y MySQL..

Estoy viendo de usar algo asi:

Código
  1. <?php
  2.  
  3. include_once("functions.php");
  4.  
  5. $mysqli = connect();
  6.  
  7. $email = mysqli_real_escape_string($mysqli, strip_tags($_POST['emilio']));
  8. $pass = mysqli_real_escape_string($mysqli, strip_tags($_POST['psw']));
  9.  
  10. $stmt = $mysqli->prepare("SELECT email, pass FROM users WHERE email = ? AND pass = ?");
  11. $stmt->bind_param('ss', $email, $pass);
  12. $stmt->execute();
  13. $stmt->bind_result($Umail, $Upass);
  14.  
  15. if($stmt->fetch() == 'true')
  16. {
  17. echo "Login!!";
  18. } else{
  19. echo "Logout!!";
  20. }
  21.  
  22. $stmt->close();
  23.  
  24. ?>

functions.php

Código
  1. function connect()
  2. {
  3. include_once("db.php");
  4. $mysqli = new mysqli($host, $user, $pass, $db);
  5. if ($mysqli->connect_errno) echo "Fallo al contenctar a MySQL: " . $mysqli->connect_error;
  6. return $mysqli;
  7. }

Ya se que el tema es super extenso, que hay muchas formas de protegerse y lo mejor es combinarlas, se que no solo es cuestión de código, sino de seguridad en el servidor también.. no pretendo una explicación detallada, pero al menos lo fundamental, que no puede faltar!!  :rolleyes:

Voy a numerar las que yo conozco, y si falta algo me ayudan comentando abajo..

  • Usuarios restringidos MySql
  • Cifrado de contraseña
  • Permisos restringidos de las carpetas y archivos PHP
  • Contador de intentos de login
  • Escapar caracteres "malos"

Aclaro.. hablo de lo fundamental, que no debería faltar nunca para un registro/login seguro..

Y por ultimo, no existe algún "proyecto" que facilite todas las funciones de seguridad? O sea,, algún código ya armado y testeado? Aunque sea de pago, vale la pena por la seguridad del sitio..

Saludos! Perdon si es muy largo el post


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: ivancea96 en 4 Diciembre 2014, 00:07 am
Yo sólo utilizo mysqli real scape para el nombre de usuario. La contraseña la almaceno en SHA1, y ya no hay problema.


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: #!drvy en 4 Diciembre 2014, 00:15 am
- No almacenes la contraseña en texto plano. El uso de hashes de comprobacion (md5,sha1,sha512) esta desaconsejado. Mira alternativas como bcrypt.

- Si usas prepared statements no deberias tener problemas con sqli.

- Asegurate de evitar DoS (inputs muy largos). Restringir el input a una cantidad razonable como 1024 bytes.

- No escapes caracteres malos. Es mejor tener una whitelist que una blacklist.

- Asegurate que procesas correctamente el encoding.

Citar
Y por ultimo, no existe algún "proyecto" que facilite todas las funciones de seguridad

Si.. casi cualquier framework. Y deberias usarlo ya que ya hay gente que se ha preocupado por hacer seguras estas cosas.. no hace falta reinventar la rueda. Mirate alguno basico como CodeIgniter.

Saludos


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: Vaagish en 4 Diciembre 2014, 17:20 pm
Gracias por las respuestas! Tendré en cuenta esos consejos..

Citar
Y por ultimo, no existe algún "proyecto" que facilite todas las funciones de seguridad? O sea,, algún código ya armado y testeado? Aunque sea de pago, vale la pena por la seguridad del sitio..

Citar
Si.. casi cualquier framework. Y deberias usarlo ya que ya hay gente que se ha preocupado por hacer seguras estas cosas.. no hace falta reinventar la rueda. Mirate alguno basico como CodeIgniter.

Exacto! Aunque puse al final eso, lo mejor es usar algo ya testeado, a parte del tiempo que consume programar registro y login,, pero siempre es bueno saber como funcionan las cosas.. voy a mirar ese que me decis ahi..

Gracias otra vez! Saludos!


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: JorgeEMX en 5 Diciembre 2014, 01:52 am
Algo que te quitará muchos dolores de cabeza es casi casi obligar a los usuarios a crear contraseñas seguras. De ahí, ver que no te hagan inyecciones SQL y por último, asegurarte que puedes restringir la cantidad de peticiones al servidor.


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: Vaagish en 5 Diciembre 2014, 20:56 pm
Hi!

Citar
Algo que te quitará muchos dolores de cabeza es casi casi obligar a los usuarios a crear contraseñas seguras. De ahí, ver que no te hagan inyecciones SQL y por último, asegurarte que puedes restringir la cantidad de peticiones al servidor.

El servicio de hosting deberia de controlar lo de las peticiones o yo?

Gracias! Saludos!


Título: Re: Seguridad Login-Registro PHP/MySql
Publicado por: ivancea96 en 5 Diciembre 2014, 21:16 pm
Contraseñas seguras, requiriendo por ejemplo un número, una letra, y 8 caracteres mínimo. Eso lo validas en el PHP, y lo pides en el JS.