Aller au contenu

Chercher une expression dans une chaîne


Sujets conseillés

Posté

Bonsoir,

J'ai une question problèmatique.

Un client me demande pour son site internet de modérer l'accès au site pour les gens ayant un pass. Ce pass est composé de 6 lettres et/ou chiffres. Exemple: E7A5FG. Ce code, une fois qu'il a été entré dans le site est alors supprimé et invalide pour les prochaines connexions!

J'ai la liste des codes sous un format *.txt: pass.txt

Je l'importe dans ma page en PHP via la commande file();

Je copie le contenu du fichier pass.txt dans une variable $contenu et je la transforme d'un tableau en chaîne via la commande implode().

$contenu = implode("",$contenu);

Le code entré par l'utilisateur dans la page précédente dans un formulaire POST est récupérée et s'appelle $code

$code = $_POST['code'];

Et là... trou noir.

Comment chercher une éventuelle occurence de $code dans $contenu et renvoyer TRUE si l'occurence a été trouvée, FALSE si l'occurence n'a pas été trouvée.

Puis, comment supprimer l'occurence de la variable $contenu si elle a été trouvée.

Enfin, comment réecrire dans le pass.txt le contenu de $contenu.

Merci pour votre aide.

pH

Posté

C'est pas tip top comme solution : ton fichier txt sera sur ton site et si un p'tit malin trouve de quelque manière que ce soit l'url de ce fichier, il verra tes mots de passe et pourra s'en servir... Tu n'as pas moyen de faire une petite table mysql avec les codes cryptés en MD5 dedans ?

Posté

Pas forcément, si tu interdits accès à ce répertoire, personne y aura accès. Ceci dit, il serait toutefois plus prudent de cryptés ces codes même en les laissant dans un fichier.

Posté (modifié)

Assez simple à faire. Tu boucles sur ta liste de mot de passes en créant au fur et à mesure un nouveau tableau dans lequel tu replace les mots de passe différents de celui du client.

Ca donne:

$trouve = false;
$ntableau = array();
foreach($contenu as $mdp) {
   if($mdp == $code) {
       // Le mot de passe a été trouvé, on ne le rajoute pas au tableau
       $trouve = true;
   } else {
       // Le mot de passe n'a pas été trouvé, on rajoute $mdp au nouveau tableau
       $ntableau[] = $mdp;
   }
}

Voilà, par la suite tu n'as qu'a vérifier si $trouve vaut true pour savoir si le mot de passe était bien dans le fichier. Ensuite, tu généres ce que tu veux écrire avec la fonction explode appliquée à $ntableau. Et tu écris tout ça avec fopen/fputs.

Pour revenir sur la question de la sécurité, je te conseille de mettre le fichier pass.txt dans un dossier dans lequel tu places un .htaccess avec écrit dedans "Deny from all". De cette façon, personne ne pourra accéder à ce dossier ni au fichier autrement que par FTP ou par tes scripts exécutés (en gros, depuis la machine).

Bonne chance ;)

Modifié par WewEB
  • 3 semaines plus tard...
Posté

Merci pour toutes vos réponses plus complètes les unes que les autres!

Au niveau de l'écriture du .htaccess

J'imagine qu'il s'agit d'un fichier texte que je renomme en .htaccess, mais au niveau du contenu, que dois-je mettre dedans? "Juste Deny from all".

pH

Posté (modifié)

Erf, cette méthode n'a pas marché et maintenant, plus possible d'ouvrir le TXT pour accéder aux infos...

Warning: fopen(-------.txt): failed to open stream: Permission denied

Même après avoir supprimé le htaccess

EDIT/ C'est bon, il s'agissait juste des permissions de fichier qui étaient mal configurées... Faut vraiment penser à tout :unsure:

pH

Modifié par phooo

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...