Mysql
 sql >> Base de données >  >> RDS >> Mysql

Questions de sécurité de site Web dynamique (PHP + MySQL)

Autres points à considérer :

1. Vous êtes vulnérable à la force brute

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.

2. Vous envoyez des mots de passe en texte clair

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

3. Envisagez d'utiliser des instructions préparées sur MySQL

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();

4. Ne relayez pas la validation côté client

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.

5. Vous êtes vulnérable au piratage de session

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.

6. Vous pouvez être vulnérable à la fixation de session

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.