Je veux ré-écrire mes scripts de connexion pour les sites Web des clients pour les rendre plus sécurisés. Je veux savoir quelles meilleures pratiques je peux mettre en œuvre dans cette situation. Les panneaux de contrôle protégés par mot de passe sont dans leur abondance, mais très peu de gens semblent implémenter les meilleures pratiques en termes d'écriture, de vitesse et de sécurité du code.
Je vais utiliser PHP et une base de données MySQL.
J'avais l'habitude d'utiliser MD5, mais je vois que Sha256 ou SHA512 serait mieux (avec un hachage et du sel sécurisé).
Certains scripts de connexion enregistre l'adresse IP tout au long de la session ou même de l'agent utilisateur, mais je veux éviter cela car il n'est pas compatible avec les serveurs proxy.
Je suis également un peu derrière la meilleure pratique dans l'utilisation de sessions dans PHP 5 (la dernière fois que je lisait était PHP 4) de sorte que certaines meilleures pratiques avec ce serait être utile.
Merci.
bcrypt
si possible. Sinon, utilisez une autre sorte de hachage itéré.mysql_real_escape_string
. N'utilisez jamais la concaténation de la chaîne pour créer votre requête. Utilisez des requêtes paramétrisées préparées et paramétrées. La plupart, sinon tous, DB pilotes pour PHP le supportez-le. Si vous ne le faites pas ' t savoir comment le faire, passez un peu de temps à apprendre à prepare
, bind
et execute
Utilisation de tout DB que vous utilisez. C'est le seulement Un moyen de vous protéger contre l'injection SQL. PDO soutient cela.Utilisez un hachage à sens unique salé (de préférence SHA512 à l'aide de http://au2.php.net/manual/fr/funcunction.hash.php ) ... de cette façon, si quelqu'un sonne votre base de données , même s'ils connaissent le sel, ils ne peuvent pas extraire les mots de passe (sans table arc-en-ciel, qui serait loong pour SHA512).
Utilisez HTTPS.
N'envoyez pas de confirmations de nom d'utilisateur/mot de passe par courrier électronique à l'utilisateur lors de leur inscription.
Si vous autorisez les cookies pour "Souvenez-vous de moi" - ajoutez un identifiant supplémentaire pour accéder aux fonctions d'administration et d'édition de profil.
Si un utilisateur reçoit un mot de passe mal, ne dites pas qu'ils ont eu le mot de passe (disent qu'ils ont obtenu le "nom d'utilisateur ou mot de passe" à tout moment) - de cette façon, moins d'indices sur les noms d'utilisateur valides.
Essayez de mettre en œuvre le nom de l'écran par rapport à la connexion - de cette façon, moins d'utilisateurs afficheront leur nom de connexion sur les listes d'utilisateurs.
Voici un bit de conseil: assurez-vous que vos cookies ne sont pas accessibles avec JS pour empêcher le vol, voir Protéger vos cookies: httponly Article de Jeff Atwood
... à travers une construction intelligente, l'URL mal formée parvient à briser le désinfectant. Le code final rendu, lorsqu'il est visualisé dans le navigateur, charge et exécute un script à partir de ce serveur distant.
... Quiconque chargement de cette page de profil utilisateur injecté par script a involontairement transmis les cookies de leur navigateur à un serveur distant diabolique!
Comme nous l'avons déjà établi, une fois que quelqu'un a vos cookies de navigateur pour un site Web donné, ils ont essentiellement les clés du royaume pour votre identité ...