Autres points à considérer :
Une attaque par dictionnaire déchiffrerait votre mot de passe. Comme la grande majorité des utilisateurs ont un mot de passe non sécurisé, ce n'est qu'une question de temps. Utilisez captcha ou enregistrez les entrées non valides. Ou ajoutez un délai lorsque le mot de passe est incorrect.
Comme l'a dit le colonel Shrapnel, une table arc-en-ciel ne vous préoccupe pas car elle est utilisée lorsque quelqu'un a un tas de hachages et veut les casser. Le sel est utilisé pour obtenir une certaine protection contre une table arc-en-ciel, et ce n'est pas votre cas.
Si quelqu'un renifle votre connexion (wifi, par exemple), vous êtes condamné. Il existe des bibliothèques javascript qui peuvent chiffrer n'importe quoi à l'aide de clés publiques. Si vous ne souhaitez pas utiliser SSL, chiffrez le login/mot de passe, envoyez-le au serveur, déchiffrez-le à l'aide de la clé privée et vous êtes plus en sécurité.
L'utilisation d'instructions préparées aide à lutter contre l'injection SQL, car elle peut s'exécuter en toute sécurité même avec une entrée malveillante :
$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();
Sur votre formulaire de connexion, vous relayez une fonction javascript empêchant la touche Entrée de fonctionner. Et si je désactive Javascript ? Vous pouvez utiliser un champ masqué (par exemple, ), utiliser votre fonction pour empêcher la touche Entrée, ET utiliser une fonction onSubmit() pour changer FormIsValid en 1 avant envoi du formulaire. Dans votre serveur, vérifiez FormIsValid.
Vos sessions sont enregistrées sur un cookie, nommé par défaut PHPSESSID. Si un attaquant peut obtenir ce cookie, il pourrait l'envoyer à votre serveur et voler votre session. Pour l'empêcher, vous pouvez enregistrer l'adresse IP de l'utilisateur et l'agent utilisateur dans la session, et comparer la valeur reçue de la session à chaque requête. Si les valeurs ne correspondent pas, l'adresse IP de l'utilisateur a peut-être changé ou la session a peut-être été piratée.
Comme indiqué ci-dessus, si quelqu'un convainc votre administrateur d'accéder à un site et que ce site envoie une demande à votre site avec un PHPSESSID sur la demande, votre site créera la session, traitera le login/mot de passe et indiquera que les informations d'identification sont erronées. . Pas mal jusqu'à maintenant.
Plus tard, votre administrateur se connecte à votre portail, la session existe déjà, l'identifiant et le mot de passe correspondent et la session est MIS À JOUR. La variable valide est maintenant 1.
Dès que la variable est mise à jour, l'attaquant a un accès complet à votre portail, car il connaît le PHPSESSID, votre site n'empêche pas le détournement de session ou la fixation de session.
Pour éviter la fixation de session et le piratage, voir #5.