Seguridad Login-Registro PHP/MySql

Iniciado por Vaagish, 3 Diciembre 2014, 22:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

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 (php) [Seleccionar]
<?php

include_once(
"functions.php");

$mysqli connect();

$email  mysqli_real_escape_string($mysqlistrip_tags($_POST['emilio']));
$pass mysqli_real_escape_string($mysqlistrip_tags($_POST['psw']));

$stmt $mysqli->prepare("SELECT email, pass FROM users WHERE email = ? AND pass = ?");
$stmt->bind_param('ss'$email$pass);
$stmt->execute();
$stmt->bind_result($Umail$Upass);

if($stmt->fetch() == 'true')
{
echo "Login!!";
} else{
echo "Logout!!";
}

$stmt->close();

?>


functions.php

Código (php) [Seleccionar]
function connect()
{
include_once("db.php");
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) echo "Fallo al contenctar a MySQL: " . $mysqli->connect_error;
return $mysqli;
}


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

ivancea96

Yo sólo utilizo mysqli real scape para el nombre de usuario. La contraseña la almaceno en SHA1, y ya no hay problema.

#!drvy

- 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.

CitarY 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

Vaagish

Gracias por las respuestas! Tendré en cuenta esos consejos..

CitarY 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..

CitarSi.. 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!

JorgeEMX

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.

Vaagish

Hi!

CitarAlgo 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!

ivancea96

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.