Otros puntos a considerar:
Un ataque de diccionario descifraría su contraseña. Como la gran mayoría de los usuarios tienen una contraseña insegura, es solo cuestión de tiempo. Use captcha o registre entradas no válidas. O agregue algo de retraso cuando la contraseña sea incorrecta.
Como dijo el Coronel Shrapnel, una tabla de arcoíris no es una preocupación para ti porque se usan cuando alguien tiene un montón de hachís y quiere descifrarlos. La sal se usa para obtener cierta protección contra una mesa arcoíris, y este no es tu caso.
Si alguien detecta su inicio de sesión (wifi, por ejemplo), está condenado. Hay algunas bibliotecas de JavaScript que pueden cifrar cualquier cosa usando claves públicas. Si no desea utilizar SSL, cifre el inicio de sesión/contraseña, envíe al servidor, descifre con la clave privada y estará más seguro.
El uso de declaraciones preparadas ayuda contra la inyección de SQL, ya que puede ejecutarse de manera segura incluso con entradas maliciosas:
$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();
En su formulario de inicio de sesión, transmite una función de javascript que impide que la tecla Enter funcione. ¿Qué pasa si desactivo Javascript? Podría usar un campo oculto (por ejemplo,
Su sesión se guarda en una cookie, por defecto llamada PHPSESSID. Si un atacante puede obtener esa cookie, podría enviarla a su servidor y robar su sesión. Para evitarlo, puede guardar la dirección IP del usuario y el agente de usuario en la sesión y comparar el valor recibido de la sesión en cada solicitud. Si los valores no coinciden, es posible que la IP del usuario haya cambiado o que la sesión haya sido secuestrada.
Como se indicó anteriormente, si alguien convence a su administrador para que acceda a algún sitio, y este sitio envía una solicitud a su sitio con un PHPSESSID en la solicitud, su sitio creará la sesión, procesará el inicio de sesión/contraseña e indicará que las credenciales son incorrectas. . No está mal hasta ahora.
Más tarde, su administrador inicia sesión en su portal, la sesión ya existe, el nombre de usuario y la contraseña coinciden, y la sesión se ACTUALIZA. La variable válida ahora es 1.
Tan pronto como se actualiza la variable, el atacante tiene acceso completo a su portal, ya que conoce el PHPSESSID, su sitio no evita el secuestro de sesión o la fijación de sesión.
Para evitar la fijación y el secuestro de sesiones, consulte el n.º 5.