8791 sujets

Développement web côté serveur, CMS

Pages :
Bonsoir,

Suite à ce sujet, est il possible de spécifier une page (avec les header locations) par mot de passe ?

Exemple:

Monpass1 = redirection vers ma_page_1.html
Monpass2 = redirection vers ma_page_2.html
Monpass3 = redirection vers ma_page_3.html


Merci.
Modifié par fred89 (06 Feb 2010 - 22:21)
Re-salut et bienvenue sur le forum, Smiley cligne

si tu parles de mots de passe "en dur" dans la page php tu pourrais faire quelque chose comme ça :
$liens_pass = array(
	'Monpass1' => 'ma_page_1.html',
	'Monpass2' => 'ma_page_2.html',
	'Monpass3' => 'ma_page_3.html'
);
if(array_key_exists($mot_de_passe, $liens_pass)) {
	header('Location: '.$liens_pass[$mot_de_passe]);
	exit();
} else {
	$erreur = 'Mot de passe incorrect';
}
A noter que cette méthode va vite devenir pénible s'il faut modifier la page à chaque nouveau mot de passe / url. Le plus simple serait d'avoir accès à une base de données pour alimenter $liens_pass.
Merci Heyoan pour cette réponse rapide.

Concernant les mot de passe, oui il seront en dur dans mes pages, mais bon sur un nombres limiter (pas plus de 6 pages) et justement je ne veux pas alourdir le système actuel (Pluxml).

Je test çà de suite Smiley cligne
Bon alors j'ai essayer d'intégrer les 2 bout code comme ceci:
<?php
$liens_pass = array( 
    'Monpass1' => '?static7/contact', 
    'Monpass2' => '?static2/ordre-de-mission', 
    'Monpass3' => 'feed.php?atom' 
); 
if(array_key_exists($mot_de_passe, $liens_pass)) { 
    header('Location: '.$liens_pass[$mot_de_passe]); 
    exit(); 
}
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>

<p>Veuillez entrer le mot de passe pour accéder à la page:</p>
<form action="<?$PHP_SELF;?>" method="post">
<p>
<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
</p>
</form>
<p>Cette page est réservée aux personnes ayant un accès privé.</p>

<?php
} // Fin du else
// Fin du code [smile]
?>


Mais ca ne semble pas du tout afficher les pages demandé Smiley decu
Aïe !

Essaies plutôt ce code (j'ai un petit doute sur tes urls...) :
<?php
// Déclaration des champs (vides ou récupération des $_POST)...
$mot_de_passe = !empty($_POST['mot_de_passe']) ? trim($_POST['mot_de_passe']) : ''; // 

$erreur = '';

// Si le formulaire a été envoyé, on teste les champs...
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	$liens_pass = array(
		'Monpass1' => '?static7/contact',
		'Monpass2' => '?static2/ordre-de-mission',
		'Monpass3' => 'feed.php?atom'
	);
	if(!empty($mot_de_passe)) {
		if(array_key_exists($mot_de_passe, $liens_pass)) {
			header('Location: '.$liens_pass[$mot_de_passe]);
			exit();
		} else {
			$erreur = 'Mot de passe incorrect !';
		}
	} else {
		$erreur = 'Saisir un mot de passe !';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test formulaire</title>
<style type="text/css">
.alert {
	color:#990000;
	font-weight: bold;
}
</style>
</head>
<body>
<?php
// erreur(s) à afficher ?
if(!empty($erreur)) {
	echo '<p class="alert">'.$erreur."</p>\n";
}
?>
<p>Veuillez entrer le mot de passe pour accéder à la page :</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<p>
		<label for="mot_de_passe">Mot de passe : </label>
		<input type="password" id="mot_de_passe" name="mot_de_passe" />
	</p>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form>
</body>
</html>

Modifié par Heyoan (05 Feb 2010 - 23:01)
fred89 a écrit :
Mais j'ai modifier mes url par l'url complète (ex: http://localhost/?static7/contact) et ca me redirige a chaque fois sur ma page d'accueil (index.php) sans aucune erreur.
Euh... ben oui ! Smiley murf
http://localhost/?static7/contact correspond à http://localhost/index.php?static7/contact (ou index.htm selon la page utilisée).

Quelle est l'url exacte que tu voudrais avoir ?

Et question bonus : pourquoi ne mets-tu pas cette url à la place ? Smiley langue
Modifié par Heyoan (05 Feb 2010 - 23:21)
Désolais j'ai mal formulé mon Url.

Celle que je désire et celle ci : http://localhost/index.php?static7/contact

Ce que j'ai bien rentré pour Monpass3 et dont ca ne me retourne pas le message d'erreur ou non et me redirige direct sur index.php

Donc le code au final:

<?php 
// Déclaration des champs (vides ou récupération des $_POST)... 
$mot_de_passe = !empty($_POST['mot_de_passe']) ? trim($_POST['mot_de_passe']) : ''; //  
 
$erreur = ''; 
 
// Si le formulaire a été envoyé, on teste les champs... 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $liens_pass = array( 
        'Monpass1' => 'http://localhost/index.php?static7/contact', 
        'Monpass2' => 'http://localhost/index.php?static2/ordre-de-mission', 
        'Monpass3' => 'http://localhost/feed.php?atom' 
    ); 
    if(!empty($mot_de_passe)) { 
        if(array_key_exists($mot_de_passe, $liens_pass)) { 
            header('Location: '.$liens_pass[$mot_de_passe]); 
            exit(); 
        } else { 
            $erreur = 'Mot de passe incorrect !'; 
        } 
    } else { 
        $erreur = 'Saisir un mot de passe !'; 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Test formulaire</title> 
<style type="text/css"> 
.alert { 
    color:#990000; 
    font-weight: bold; 
} 
</style> 
</head> 
<body> 
<?php 
// erreur(s) à afficher ? 
if(!empty($erreur)) { 
    echo '<p class="alert">'.$erreur."</p>\n"; 
} 
?> 
<p>Veuillez entrer le mot de passe pour accéder à la page :</p> 
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> 
    <p> 
        <label for="mot_de_passe">Mot de passe : </label> 
        <input type="password" id="mot_de_passe" name="mot_de_passe" /> 
    </p> 
    <p> 
        <input type="submit" value="Envoyer" /> 
    </p> 
</form> 
</body> 
</html> 

Modifié par fred89 (06 Feb 2010 - 00:04)
fred89 a écrit :
Celle que je désire et celle ci : http://localhost/index.php?static7/contact
Visiblement il te manque quelques notions de base : que se passe-t-il si tu tapes directement cette url dans un navigateur ?... Tu te retrouves sur index.php !

Donc il faut que tu détermines d'abord les urls où tu dois aller (en les saisissant directement dans ton navigateur) et après ce sera facile de renseigner les bonnes valeurs dans le code php.
Herf vraiment désolais, mes premières Url sont les bonnes Smiley confused


// Si le formulaire a été envoyé, on teste les champs... 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $liens_pass = array( 
        'Monpass1' => 'http://localhost/?static7/contact', 
        'Monpass2' => 'http://localhost/?static2/ordre-de-mission', 
        'Monpass3' => 'http://localhost/feed.php?atom' 
    ); 


Encore désolais

Au pire avec ce lien http://localhost/feed.php?atom pour Monpass3 qui parais plus "normal" ne passe pas non plus.
Modifié par fred89 (06 Feb 2010 - 00:22)
Pas de problème. Smiley cligne

Juste pour information, quand tu fais une redirection vers ?quelquechose l'url finale dépendra de la page initiale. Par exemple si tu es sur mapage.php l'url finale sera mapage.php?quelquechose

Et je suppose que le CMS gère lui même les redirections à effectuer.

Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne


Edit: Arf ! Je n'avais pas vu que tu avais édité ton post. Je ne peux pas mieux te dire que ça :
Heyoan a écrit :
Donc il faut que tu détermines d'abord les urls où tu dois aller (en les saisissant directement dans ton navigateur) et après ce sera facile de renseigner les bonnes valeurs dans le code php.


Edit2: j'espère que tu es conscient qu'en l'état c'est très peu sécurisé puisque les urls finales sont accessibles directement.
Modifié par Heyoan (06 Feb 2010 - 00:33)
Oui tout a fais le script gère ses redirection.

En mettant l'url complète(http://localhost/) de ma page il devrais pourtant me diriger sur la bonne ?

Ha pour mieux sécuriser le tout ca demande quelque chose de plus complexe ?

Merci
fred89 a écrit :
En mettant l'url complète(http://localhost/) de ma page il devrais pourtant me diriger sur la bonne ?
Pas compris... ou plutôt il me semble avoir déjà répondu tout au long du sujet.

fred89 a écrit :
Ha pour mieux sécuriser le tout ca demande quelque chose de plus complexe ?
La sécurité PHP est un vaste domaine et si tu n'y connais rien je suppose que ton site ne demande pas une sécurité extrême sinon tu ne t'y aventurerais pas. Smiley lol

Une petite chose simple serait de créer une variable de session avant la redirection :
		if(array_key_exists($mot_de_passe, $liens_pass)) {
			session_start();
			$_SESSION['controle'] = true;
			header('Location: '.$liens_pass[$mot_de_passe]);
			exit();
		} else {
et de vérifier son existence dans les parties privées (après redirection) :
session_start();
if(!isset($_SESSION['controle'])) {
	header('Location: index.php');	// redirection vers page d'accueil ou autre
}

PS : Good Night !
Modifié par Heyoan (06 Feb 2010 - 00:53)
Merci pour ce complément d'informations.

Concernant les url (encore Smiley smile ) dois je comprendre que si ma page de connexion ce trouve ici:

http://localhost/?static5/connexion

Et que donc je demande la page contact avec le mot de passe : Monpass1, cela additionneras mon url déjà existante ? Soit : http://localhost/?static5/connexionhttp://localhost/?static7/contact ?

Désolé mais je pige vraiment pas le soucis de cette histoire d'url.

Merci et bonne soirée aussi Smiley cligne

Dans l'exemple citer dans ce message c'est mon cas réelle.
Modifié par fred89 (06 Feb 2010 - 01:05)
fred89 a écrit :
Concernant les url (encore Smiley smile ) dois je comprendre que si ma page de connexion ce trouve ici:

http://localhost/?static5/connexion

Et que donc je demande la page contact avec le mot de passe : Monpass1, cela additionneras mon url déjà existante ? Soit : http://localhost/?static5/connexionhttp://localhost/?static7/contact ?
Non, l'url http://localhost/?static5/connexion est redirigée vers une page particulière par le CMS (par exemple http://localhost/index.php ) et c'est cette url qui servira de référence si tu n'utilises pas de chemin absolu.

Quoi qu'il en soit c'est le CMS qui gère toutes les redirections à sa manière donc je ne saurais pas te dire comment il s'y prend.
Modifié par Heyoan (06 Feb 2010 - 08:45)
Ok, je viens de faire le test dans une page php normal (sans le cms) et sa fonctionne, sauf pour l'histoire de la sessions.

En effet si je me dirige sur une page dont on connais l'url sans inséré le mot de passe, celle ci s'affiche sans me rediriger sur index.php avec cette session en debut de page:
session_start(); 
if(!isset($_SESSION['controle'])) { 
    header('Location: index.php');    // redirection vers page d'accueil ou autre 
}
Pour rappel une variable de session reste active tant que tu n'as pas fermé le navigateur. Donc si tu as d'abord fait un test en saisissant l'un des mots de passe et qu'ensuite tu aies essayé une url directe sans saisir de mot de passe c'est normal que ça s'affiche : il faut fermer le navigateur (ou supprimer le cookie PHPSESSID avec par exemple l'extension web developper de Firefox) puis quand tu le rouvres saisir directement cette url.
Rho merci, vraiment très calé ^^

La en effet ca me redirige bien en index.

Donc pour parfaire le tout, comment insérer la fonction crypt au mot de passe et afficher un petit texte/bouton déconnexion sur les pages sécurisé ?

Et je pense ne plus te déranger pour ce topic Smiley smile

Encore merci de ton aide.
Modifié par fred89 (06 Feb 2010 - 20:39)
fred89 a écrit :
Donc pour parfaire le tout, comment insérer la fonction crypt au mot de passe et afficher un petit texte/bouton déconnexion sur les pages sécurisé ?
Quel gourmand ce Fred ! Smiley ravi

Alors pour crypt tu pourrais commencer par récupérer les valeurs déjà cryptées de tes mots de passe en faisant par exemple echo crypt('Monpass1', 'bilbo'); (bilbo est ce qu'on appelle le salt. Tu mets ce que tu veux). Cela donne par exemple :
Monpass1 -> biVjftySdZfDM
Monpass2 -> biMgTP1MyON4w
Monpass3 -> bi1nZc6q/1hmo

Le code devient donc :
// Déclaration des champs (vides ou récupération des $_POST)... 
$mot_de_passe = !empty($_POST['mot_de_passe']) ? crypt(trim($_POST['mot_de_passe']), 'bilbo') : ''; //  
 
$erreur = ''; 
 
// Si le formulaire a été envoyé, on teste les champs... 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $liens_pass = array( 
        'biVjftySdZfDM' => '?static7/contact', // Monpass1
        'biMgTP1MyON4w' => '?static2/ordre-de-mission', // Monpass2
        'bi1nZc6q/1hmo' => 'feed.php?atom' // Monpass3
    ); 

Pour la déconnexion : voir session_destroy. Donc tu mets un lien Déconnexion vers une page qui contient le code mis en exemple sur php.net et tu finis par un header('Location: index.php'); (ou autre page)
Mille merci pour ton aide qui est bien plus que de l'aide.

Reste plus qu'a intégrer ça au cms ou voir autre chose.

Bonne soirée.
Pages :