Comment implémenteriez-vous l’authentification basée sur FORM sans base de données de sauvegarde ?

StackOverflow https://stackoverflow.com/questions/17376

Question

J'ai un script PHP qui s'exécute comme un programme CGI et le HTTP Authenticate l'en-tête est mangé et craché.Je voudrais donc implémenter une sorte d’authentification basée sur FORM.Contrainte supplémentaire, il n'y a pas de base de données donc aucune donnée de session ne peut être stockée.

Je suis très ouvert à l'idée d'avoir un nom d'utilisateur et un mot de passe principaux.J'ai juste besoin de protéger l'application d'un intrus qui ne connaît pas ces informations d'identification.

Alors, comment mettriez-vous cela en œuvre ?

Biscuits?

Je pourrais présenter le formulaire et s'il est validé, je peux renvoyer un cookie qui est un hachage de l'adresse IP accompagnée d'un code secret.Ensuite, je peux empêcher le rendu des pages à moins que la chose ne soit décryptée correctement.Mais je n'ai aucune idée de comment implémenter cela en PHP.

Était-ce utile?

La solution

Quelques façons de procéder.

  1. htaccess - demandez à votre serveur Web de sécuriser les pages en question (pas exactement basées sur un formulaire CGI).
  2. Utilisez des cookies et une sorte d'algorithme de hachage (md5 suffit) pour stocker les mots de passe dans un fichier plat où chaque ligne du fichier est nom d'utilisateur : mot de passehash.Assurez-vous de sel vos hachages pour plus de sécurité par rapport aux tables arc-en-ciel.(Cette méthode est un peu naïve...être très faites attention à la sécurité si vous empruntez cette route)
  3. utiliser quelque chose comme un SQLite base de données juste pour gérer l'authentification.SQLite est suffisamment compact et simple pour pouvoir répondre à vos besoins même si vous ne voulez pas d'un gros backend de base de données.

Théoriquement, vous pouvez également stocker les données de session dans un fichier plat, même si vous ne disposez pas de base de données.

Autres conseils

Si vous utilisez actuellement Authenticate, vous disposez peut-être déjà d'un mot de passe ht déposer.Si vous souhaitez continuer à utiliser ce fichier, mais passer à l'authentification basée sur FORM plutôt que via l'en-tête Authenticate, vous pouvez utiliser un script PHP pour utiliser le même fichier htpasswd et utiliser des sessions pour maintenir l'état d'authentification.

Une recherche rapide sur Google pour php htpasswd révèle cette page avec une fonction PHP pour vérifier les informations d'identification par rapport à un htpasswd.Vous pouvez l'intégrer (en supposant que vos sessions soient configurées pour démarrer automatiquement) avec du code comme celui-ci :

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

Avez-vous vraiment besoin d'un formulaire ?Quoi que vous fassiez, vous êtes limité par la connaissance du nom d'utilisateur et du mot de passe.S'ils le savent, ils obtiennent votre cookie magique qui leur permet de le faire.Vous voulez les empêcher de voir les pages s'ils ne connaissent pas le secret, et l'autorisation de base fait cela, est facile à configurer et ne nécessite pas beaucoup de travail de votre part.

Avez-vous vraiment besoin de voir l’en-tête Authorization si le serveur Web s’occupe du contrôle d’accès pour vous ?

De plus, si vous fournissez l'application à une liste connue de personnes (plutôt qu'au public), vous pouvez fournir un accès basé sur un serveur Web en fonction d'autres facteurs, tels que l'adresse IP entrante, les certificats clients et bien d'autres éléments. une question de configuration plutôt que de programmation.Si vous expliquez vos contraintes de sécurité, nous pourrons peut-être vous proposer une meilleure solution.

Bonne chance, :)

...À propos de Salt, ajouter le nom d'utilisateur dans votre hash salt empêchera quelqu'un qui connaît votre salt et aura accès à votre fichier de mots de passe d'écrire une table arc-en-ciel et de déchiffrer le numéro du mot de passe de vos utilisateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top