8791 sujets

Développement web côté serveur, CMS

Bonjour,

je vaudrais que sur mon site, une certaine partie soit protégée par un accès codé afin que seules certaines personnes autorisées puissent y accéder.

Peut-on me donner des informations sur la procédure à mettre en ouevre

Merci
Salut,

Il existe, il me semble, pas mal de discussion là dessus.

Mais résumons les quelques méthodes :

- .htaccess & .htpasswd (l'un demande la règle d'accès, l'autre contient les idenfiants de connexions)
- $_SESSION[''] php (tout est traité par le php, les sessions ne dure que le temps d'une visite, à la fermeture du navigateur, il faut se relogger, sauf si ... cookie il y a
- $_COOKIE[''] php, (la personne se loggue, on crée un cookie, qui permet d'identifier le visiteur le long de son parcours, on peut donner une durée de vie au cookie)

Il y a peut être d'autre méthodes, mais je ne les connais pas.

Dis en nous plus sur ton projet, pour en déterminer les besoins.
Pour en dire plus, je suis en train de monter un site en utilisant des méthodes php.

Ce site dois être accessible à tous, mais seule une zone sera protégée par un accès codé.

étant novice en la matière, je cherche la meilleures solution pour réaliser cela Smiley biggrin
Bonjour,

Super_baloo8 j'ai adapté le code que tu m'as fourni à ma page et ela fonctionne très bien. Merci

Un point de détail: La page conserve l'historique des mots de passe employés et en clair.
Comment peut-on empêcher cela?

Autre question:
Une fois l'accès obtenu, j'ai un formulaire que je voudrait du style de ce que nous avons sur ce site pour envoyer un post. As-tu un tutorial à ce sujet?

Merci
Modifié par Boubou57 (26 Jun 2008 - 15:58)
Boubou57 a écrit :
Un point de détail: La page conserve l'historique des mots de passe employés et en clair.
Comment peut-on empêcher cela?

A priori il suffit de remplacer le type="text" par un type="password" Smiley cligne .
Super ! Merci

Reste à gérer le fomulaire Smiley confus

A ce titre, où peut-on trouver les fonctions javascript employées?
Modifié par Boubou57 (26 Jun 2008 - 16:19)
Je ne vois pas ce que le javascript vient faire là, on s'en fous royalement.

Une idée pour protéger ton champs aussi, change l'attribut "name" et "id" pour éviter que n'importe quoi ne soit garder, par exemple en php :


<?php
$name_or_id = "mon_champs_".$time();
?>

<label for="<?php echo $name_or_id; ?>">Mon champ</label>

<input id="<?php echo $name_or_id; ?>" name="<?php echo $name_or_id; ?>" type="password" />

?>


Après, pour traiter ton formulaire, il faut que tu apprennes un langage de programmation. Par exemple PHP sur le site du Zéro, fouilles et tu devrais tout trouver par toi même j'en suis sur !
Modérateur
Salut,

Tu peux faire ceci en exemple :


<?php
if ($_REQUEST['envoyer']=="envoyer"){ //si le formulaire est soumis
 if($_REQUEST['login']=="mon login" && $_REQUEST['pass']=="mon mot de passe"){ //vérification du login ET du mot de passe
  header("locations:mon_lien.php"); //SI ok redirection vers...
 }else{
  formulaire(); //Sinon affichage du formulaire
}else{
 formulaire(); //Sinon affichage du formulaire
 
}


function formulaire (){
 echo "<form name=\"mon_formulaire\" action=\"".$_SERVER[PHP_SELF]."\" method=\"post\">";
 echo '<input type="text" name="login" />';
 echo '<input type="password" name="pass" />';
 echo '<input type="submit" name="envoyer" values="envoyer" />'; 
 echo '</form>';
}
?>


Ce code, je l'ai fait de tête sans test mais je pense qu'il devrait fonctionner et t'aider Smiley smile . Ceci est un bon schémas de base il me semble. certes il est succinct. Il reste des améliorations à faire tout de même (connexion à la bdd, cryptage des données, etc.).

En souhaitant t'avoir aider.

@+
Euh, pour plus de sécurité je n'utiliserais que des "$_POST" et non "$_REQUEST" trop vaste ($_POST, $_GET, $_COOKIE)
Salut,

Merci de toutes vos réponses.

Concernant $_POST ou $_REQUEST.... Smiley biggol j'avoue que je ne saisi pas très bien

Voilà ce que j'ai fait (le code viendra par la suite)

- J'ai construis une table mysql avec dedans les login et mots de passe des gens autorisés.
- J'ai Réussi à récupérer les données de la table (GROS progrès pour moi Smiley biggrin )
- J'essaye de faire maintenant le lien entre les données récupérée sur la base de données et le petit formulaire que j'ai créé (avec votre humble aide Smiley ravi ). Cela afin de comparer les valeurs afin de donner accès ou non.

ET là je galère encore car mes connaissances sont très sommaires Smiley bawling
En gros, $_REQUEST est très très très, voir trop trop trop large.

Si tu récupère t'es variables de formulaire par $_REQUEST, ces variables peuvent venir :

- De champs de formulaire (en méthode $_POST (transparent pour l'utilisateur))
- De champs de formulaire (en méthode $_GET (affiché dans l'URL))
- De cookies

Il est largement préférable de contrôler la source de ses variables.

Donc si tu utilise $_POST tu sauras avec certitude, que les variables que tu récupères viennent du formulaire, et non pas d'un cookie ou de paramètre rajouté dans l'url.

Fin de parenthèse Smiley lol

Toutes mes félicitations, tu as l'air de bien progressé !

Si tu as besoin d'un coup de pouce n'hésites pas !!!
Salut, merci de vos encouragements Smiley biggrin

Bon! J'arrive avec le code ci-dessous à presque obtenir l'effet souhaité:


<?php
if($connection = mysql_connect("localhost","mon_login_bd","mon_passe_bd")){
    if(mysql_select_db("ma_base_de_donnees")){
        echo "succès de connexion.";
        $request = "SELECT * FROM `ma_table`";
        if($result = mysql_query($request)){
              while($ligne = mysql_fetch_row($result)){
                  $id = $ligne[0];
                  $prenom = $ligne[2];
                  $nom = $ligne[1];
                  $identifiant = $ligne[3];
                  $cle_entree =$ligne[4];
                 }
              
              if (isset($_POST['mot_de_passe']) && isset($_POST['login'])){
                  $mot_de_passe = $_POST['mot_de_passe'];
                  $login = $_POST['login'];
              }
              else {
              $mot_de_passe = "";
              $login = "";
              }
              if ($mot_de_passe == $cle_entree && $login == $identifiant){
                            echo "Mot de passe correct <br />";
                            echo "bonjour $prenom";       
              }
              else{
?>
              <form action="ma_page.php" method="post">
                    Identifiant:
                    <input type="text" name="login" /><br> 
                    Mot de passe:
                    <input type="password" name="mot_de_passe" /><br>
              <input type="submit" value="Valider" /><br>
              </form>
<?php

              }  
        }
        else{
              echo"Erreur requête";
        }
    }
    else{
        die("Echec de connexion à la base.");
    }
    mysql_close($connection);
}
else{
    die("Echec serveur");
}
?>


Cela fonctionne bien si dans ma base de données, il n'y a qu'un seul utilisateur. Smiley ravi
Mais dès que je mets un second utilisateur, mon code ne tient compte que du dernier enregistré. Smiley biggol
Je me doute que cela vient de la boucle while
Si vous pouvez me faire avancer. ... Smiley biggrin
Modifié par Boubou57 (02 Jul 2008 - 15:38)
Fais une requête sur ta table par rapport au "Login de la personne, si tu ne trouve rien, c'est que l'utilisateur n'existe pas, si tu trouve quelques chose, compare le mot de passe.

Ca donnerais quelques chose comme ceci :


<?php
$request = "SELECT password, id FROM ma_table WHERE login ='".$_POST['login']."'";
$result = mysql_query($request);
$datas = mysql_fetch_assoc($result);

if(!$datas['id'])
	{
	echo 'Utilisateur inexistant';
	}
	elseif($datas['id'] AND ($_POST['password'] != $datas['password'])
		{
		echo '<h1>Mauvais mot de passe</h1>';
		}
		elseif($datas['id'] AND ($_POST['password'] == $datas['password'])
			{
			echo '<h1>Bonjour !</h1>';
			}
			else
				{
				echo '<h1>BUG</h1>';
				die();
				}
			
mysql_close();
?>

Modifié par Super_baloo8 (02 Jul 2008 - 15:51)
Modérateur
Salut,

Comme je vois que tu avances bien, je pense qu'il serait intéressant de voir les fonctions
MD5 ou SHA1 ou CRC32 de plus près pour des raisons de sécurité supplémentaires Smiley cligne .

En gros, ces fonctions cryptent (non-aléatoirement) les données. même l'admin ne peut connaître le pass.

@+
Modifié par Nolem (02 Jul 2008 - 18:39)