[Super Débutant] Page d'accueil protégée par password simple

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Super Débutant] Page d'accueil protégée par password simple

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 03 mai 2015, 20:32

Salut à tous! Je relance le sujet et me tourne à nouveau vers vous car je ne parviens malheureusement pas à m'en sortir..
J'ai bien suivi tes conseils (très) détaillés Aureusms mais je bute sur cette fameuse page de "Server Error".
Image
Pour résumer, après qu'Aureusms m'ait fourni les codes php pour mettre en place un sha256, il m'a expliqué comment effectuer un rewriting html vers php via un fichier .htaccess contenant le code suivant:
AddType x-mapp-php5.4 .php
AddHandler x-mapp-php5.4 .php
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(index\.html)$ index.php [L]
Mais comme je l'ai annoncé dès la création du sujet, je suis ce qu'on appelle un vrai débutant. Je pense donc ne pas exploiter ces infos comme il se doit puisque ça ne semble pas fonctionner.. Est ce que quelqu'un se sentirait chaud pour prendre le relai? =D>
Merci d'avance!

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 17 avr. 2015, 10:07

Je t'ai envoyé par mp l'adresse de mon site, je sens que je m'approche du but mais j'ai bien peur d'ètre trop débutant pour pouvoir exploiter tes explications comme il faut!

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 16 avr. 2015, 05:42

Bonjour,

Tu ne me gonfle pas. Si j'ai un peu de temps, je t'aide c'est tout ;-).
Je vais t'expliquer comment fonctionne les sessions.

Une session est gérée côté serveur, l'utilisateur ne peut pas modifier les données d'une session.
Elle démarre avec session_start(); qui doit se trouver n'importe où dans toutes les pages qui utiliseront les sessions mais avant une sortie texte (genre un echo.. ou <!DOCTYPE html>). C'est pour cela qu'on le place souvent en début de page.

Si tu utilises session_start(); sur une page, une super variable (c'est comme cela qu'on l'appelle) $_SESSION est créée et se comporte comme un tableau. Elle se transmets de page en page qui ont session_start();. Tu peux ajouter à cette super variable des clefs numériques, associatives. (ex. $_SESSION["motDePasseVerifie"]). Là où cela devient sympa, c'est que, comme cette super variable est disponible sur toutes les pages où session_start(); est placé, si tu modifies la variable dans une page, elle est aussi modifiée dans les autres.

Dans ton cas, nous allons vérifier si le mot de passe est correct et s'il l'est, un valide via une variable de session ($_SESSION["motDePasseVerifie"] = true; dans l'exemple ci dessous).

Ensuite, il te reste à vérifier si $_SESSION["motDePasseVerifie"] est bien "true" sur toute les autres pages. Si oui, l'utilisateur a validé le mot de passe, sinon non !
<?php
ini_set('session.use_trans_sid', "0");
ini_set('session.use_cookies', "1");
ini_set('session.use_only_cookies', "1"); 

session_start(); //démarrage de session
session_regenerate_id(); //régénération de l'id de session pour la sécurité

//fonction pour la vérification du mot de passe oublié lors du dernier code
function sha256($string = false) {
	return (!is_string($string) or empty($string)) ? false : hash('sha256',$string);
}

if (!isset($_SESSION["motDePasseVerifie"]))
	$_SESSION["motDePasseVerifie"] = false;

if (!empty($_POST)) {
	$motDePasseVerifie = sha256('coucoulemotdepasse123');
	$messageRetour = false;
	if (empty(trim($_POST["password"]))) {
		$messageRetour = "Le mot de passe ne peut être vide";		
	}
	elseif (sha256($_POST["password"]) == $motDePasseVerifie) {
		$messageRetour = "Le mot de passe n'est pas le bon !";
	}
	else
		$_SESSION["motDePasseVerifie"] = true;
}
?>
<!DOCTYPE html>
<html>
	<head>
	<title>HTML5 Login</title>
	<link rel="stylesheet" href="normalize.css">
	<link rel="stylesheet" href="style.css">
	</head>
<body>
	<section class="loginform cf">
	<?php
	if (empty($_SESSION["motDePasseVerifie"])) {
		?>
		<form name="login" action="<?php echo $_POST["PHP_SELF"]; ?>" method="post" accept-charset="utf-8">
			<ul>
				<li>
					<label for="password">Password</label>
					<input type="password" name="password" placeholder="password" required />
				</li>
				<li>
					<input type="submit" value="Login" />
				</li>
				<?php
				if (!empty($messageRetour)) {
					?>
					<p><?php echo $messageRetour; ?></p>
					<?php
				}
				?>
			</ul>
		</form>
		<?php
	}
	else {
		?>
		<p>Vous êtes maintenant connecté</p>
		<p>
			<a href="lien.php">lien</a>
		<?php
	}
	?>
	</section>
</body>
</html>
Sur les autres pages (ex. lien.php) :
<?php
ini_set('session.use_trans_sid', "0");
ini_set('session.use_cookies', "1");
ini_set('session.use_only_cookies', "1"); 
session_start(); //démarrage de session
session_regenerate_id(); //régénération de l'id de session pour la sécurité

if (empty($_SESSION["motDePasseVerifie"])) {
  // pas utilisateurs
  echo 'Vous n'êtes aps autorisé à consulter cette page ! ';
  exit;
}
else {
  //utilisateurs
  echo 'bonjour utilisateurs';
  echo 'les variables de sessions sont : <pre>'.print_r($_SESSION).'</pre>';
}
?>

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 15 avr. 2015, 23:50

Bon je dois t'avouer que tu m'as un peu perdu en route.. J'ai opté pour la solution de la page d'accueil, uniquement réservée à la saisie du mot de passe. De ce coté tout est prèt (enfin je crois). Maintenant je souhaiterais faire en sorte que la validation du fameux mot de passe permette l'ouverture de la page principale. Mais j'avoue ne pas savoir comment faire du tout.. Je suis d'autant plus perdu que je ne comprends pas par quel miracle, on ne pourrait pas tout simplement contourner cette "protection" en copiant/collant l'adresse de cette deuxième page.

J'espère ne pas trop te gonfler, c'est bien sympathique de ta part de m'aider en tout cas !

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 15 avr. 2015, 20:08

Oui et non. Tu peux gérer ensuite via les sessions qui tu dois utiliser sur toute les pages.

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 14 avr. 2015, 17:31

Donc je dois insérer ces lignes dans le code de ma page principale (au début par exemple?) si je comprends bien.
Par contre les autres pages du site ne seront pas protégées si? Si quelqu'un copie colle le lien d'une page autre que celle contenant le formulaire il pourra y accéder?
:?:

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 14 avr. 2015, 13:48

La même page sert au formulaire et la vérification du formulaire.

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 14 avr. 2015, 13:45

Wow merci beaucoup!
Du coup je m'y perd un peu, ce code fonctionne sur la page du site que je veux verrouiller ou je dois créer une première page qui pointera vers le contenu même du site, si le mot de passe est validé?

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 14 avr. 2015, 13:31

Non pas de Tuto mais cela reste simple.
Créer le résultat de ton formulaire, je te guiderai et voici pour commencer :
<?php
if (!empty($_POST)) {
	$motDePasseVerifie = sha256('coucoulemotdepasse123');
	$messageRetour = false;
	if (empty(trim($_POST["password"]))) {
		$messageRetour = "Le mot de passe ne peut être vide";		
	}
	elseif (sha256($_POST["password"]) == $motDePasseVerifie) {
		$messageRetour = "Le mot de passe n'est pas le bon !";
	}
}
?>
<!DOCTYPE html>
<html>
	<head>
	<title>HTML5 Login</title>
	<link rel="stylesheet" href="normalize.css">
	<link rel="stylesheet" href="style.css">
	</head>
<body>
	<section class="loginform cf">
	<form name="login" action="<?php echo $_POST["PHP_SELF"]; ?>" method="post" accept-charset="utf-8">
		<ul>
			<li>
				<label for="password">Password</label>
				<input type="password" name="password" placeholder="password" required />
			</li>
			<li>
				<input type="submit" value="Login" />
			</li>
			<?php
			if (!empty($messageRetour)) {
				?>
				<p><?php echo $messageRetour; ?></p>
				<?php
			}
			?>
		</ul>
	</form>
	</section>
</body>
</html>
Le mot de passe est "coucoulemotdepasse123" mais je pense que tu l'avais compris.

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 14 avr. 2015, 13:08

Salut Aureusms Merci beaucoup pour ton aide. Je crois que la dernière solution dont tu parles serait parfaite. J'ai simplement besoin de définir un unique mot de passe que je donnerai aux personnes à qui je souhaite montrer le portfolio. Ça devrait donc être simple?
Aurais tu sous la main un tutoriel:)?

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 14 avr. 2015, 10:17

Ah si tu veux personnaliser, le mieux est login + mot de passe + hashage mot de passe + base de données + gestion utilisateur + session + token. Bref, un peu lourd à mettre en place pour un Super débutant

Autre moyen : Tu peux aussi simplement mettre des mots de passes codés dans un dossier sécurisé par exemple mais seulement si ton nombre d'utilisateurs est faible (<30) sinon cela deviendra très difficile à gérer.
Si tu es intéressé par cette voie, regarde du côté des hash() ou sha256(). Il suffit de comparer le mot de passe envoyé avec celui stocké dans un dossier et s'ils correspondent de donner l'accès via un mode de Session par exemple.

L'idéal est quand même la gestion via base de donnée.

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 14 avr. 2015, 09:22

Oui j'ai fait le test, mais la fenêtre qui s'ouvre pour demander le mot de passe dépend du navigateur et n'est donc pas personnalisable.
Mon site étant destiné à accomplir un portfolio, j'aimerais vraiment pouvoir intégrer la fenêtre et pouvoir personnaliser celle ci.

Comment feriez vous pour protéger l'accès à une page en Html?

Merci encore

Re: [Super Débutant] Page d'accueil protégée par password simple

par Aureusms » 14 avr. 2015, 08:23

Ce n'est pas une fenêtre mais un simple fichier que tu mets en FTP dans la racine de ton site ou dans le dossier que tu veux protéger.
Dès que le visiteur ouvre cette page, le moteur APACHE regarde si ce fichier existe et s'il existe oblige l'utilisateur à rentrer un mot de passe qui est contenu dans un autre fichier. C'est ultra efficace.

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 13 avr. 2015, 13:47

J'ai malheureusement trouvé la réponse tout seul..impossible de personnaliser une fenêtre htaccess. Je préfère donc chercher du côté html/php.
Après avoir testé l'embryon de code que j'ai copié plus haut, je pensais naïvement qu'il ne me manquait plus qu'à ajouter une ligne définissant un mot de passe, qui une fois renseigné, induirait l'ouverture de la page suivante..
Il s'agirait donc d'une protection peu efficace? Comment partir de ce que j'ai pour le rendre fonctionnel?

Re: [Super Débutant] Page d'accueil protégée par password simple

par legrandjacques » 13 avr. 2015, 13:29

D'abord merci beaucoup à vous pour la réponse rapide :) Ensuite il semblerait bien que cette solution soit beaucoup plus adaptée à mes attentes.. Par contre je me demandais si l'aspect d'un htaccess était modifiable? J'ai oublié de le préciser mais c'est un point assez important pour moi. Je souhaiterais que la page d'accueil de mon site affiche donc une boîte de dialogue pour entrer un mot de passe..mais j'aimerais éviter la fenêtre Windows de base:) Pouvez vous m'éclairer sur ce point la aussi?
Merci encore