PHP + HTACCESS -> GET, POST ?

guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
 yot -
Bonjour,

Je souhaiterai savoir si il est possible de protèger un dossier par htaccess mais tout en utilisant un formulaire (html+php) comme interface d'authentification.

Ce la nous donnerai le shéma suivant :

Page d'authentification -> Protection htaccess transparente -> Page privé souhaitée.

Les mot de passe en clair ne fond pas partis de la problématique, ce n'est donc pas la question de ce post.
Il n'est nulement question de l'opignion concernant la sécurité des connexion par session ou par htaccess.
Ce choix technologique doit absolument être maintenu, nous souhaitons simplement rendre plus digeste l'authentification qui actuellement est double (formulaire + login htaccess).

On est parvenu à garder la seule authentification htaccess qui se décline ensuite en session mais ce n'est pas le formulaire de connexion que l'on veut retirer, mais la fenêtre htaccess ! On garde cette possibilité mais je souhaiterai ne pas avoir à l'envisager ^^

D'avance merci à tous.
A voir également:

12 réponses

gabriel gray
 
Si j'ai bien compris c'est ça que tu cherches :

<?php
function authenticate() {
    header('WWW-Authenticate: Basic realm="Test Authentication System"');
    header('HTTP/1.0 401 Unauthorized');
    echo "Vous devez entrer un identifiant et un mot de passe valide pour accéder
    à cette ressource.\n";
    exit;
}

if ( !isset($_SERVER['PHP_AUTH_USER']) || 
     ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    authenticate();
} else {
    echo "<p>Bienvenue : {$_SERVER['PHP_AUTH_USER']}<br />";
    echo "Ancien : {$_REQUEST['OldAuth']}";
    echo "<form action=\"{$_SERVER['PHP_SELF']}\" method=\"post\">\n";
    echo "<input type=\"hidden\" name=\"SeenBefore\" value=\"1\">\n";
    echo "<input type=\"hidden\" name=\"OldAuth\" value=\"{$_SERVER['PHP_AUTH_USER']}\">\n";
    echo "<input type=\"submit\" value=\"Identification\">\n";
    echo "</form></p>\n";
}
?>
3
guismojames
 
Par ce que mieux vos tard que jamais, merci infiniment !
0
Cute-issime
 
Bonjour,

J'ai le même probleme que toi Guismojames, mes utilisateurs se connecte déjà via un formulaire, ext ( j'utilise des sessions aussi) je voudrais leur épargner une 2em identification au moment du htaccess.

Tu as l'aire d'avoir trouver grâce à la réponse de gabriel gray, j'ai donc tenté de m'en inspirer pour mon probleme, mais j'arrive pas a voir en quoi ça aide >< je doit chercher dans la mauvaise direction.

J'ai fait qqch dans l'esprit

<?php
    $_SERVER['PHP_AUTH_USER']='monId';
    $_SERVER['PHP_AUTH_PW']='monMdp';
?>
<a href='./mon/dossier/proteger/' > Ici </a>


J'espérais que les 2 variables Serveur permettraient la confection via htacess


ps : vue mon poste, inutile de vous dire que je début dans l'utilisation de htaccess $:

Merci =} ;
3
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Regarde du côté de auth_digest, si tu as la chance que ce mod soit activé sur ton server.

https://www.php.net/features.http-auth
2
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
Bonjour,

Bien que cela ne réponde pas à ma problématique, elle m'a apporté une connaissance technologique supplémentaire que je ne connaissais pas. Je pensais en effet que la fenêtre d'authentification était propre à la technologie htaccess, j'ignorai qu'elle pouvait être appeler depuis php. (du coup sa m'a aider sur un autre problème ^^)

Toutefois, pour préciser ma problématique, j'expose ma situation :

/root
+ /administrator
- .htaccess
- .htpasswd
- index.php
- index.php

Je souhaite passer l'authentification basic de htaccess, sans afficher la fenêtre login/password ! (passer de index de la racine a celui du dossier administrator).

Je souhaiterai donc connaître si cela est réalisable par formulaire html (GET, POST ...) ou via une fonction php quelconque (peut être header(), mais je n'ai pas trouvé).

Si cela n'est pas réalisable, je garderai la fenêtre d'authentification de htaccess, mais je souhaiterai que les utilisateurs connecté sur le site, et ayant les droits d'accès (via session php + mysql) n'est pas a s'authentifier à nouveau pour accéder au dossier administrator !

Ma contrainte est que l'authentification htaccess du dossier administrator ne peut pas être supprimé !

htaccess ne peut-il pas récupérer des variables passés en GET qu'il comparerai dans le but d'une authentification ?
PHP ne peut il pas envoyer le login+password d'une méthode qui permette de franchir de façon transparente cette sécurité ?
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
La maîtrise de htaccess n'est pas du tout la problématique !

Moi j'ai une contrainte client, qui est le htaccess (mis à jour et gèré par un CRM tiers), pareil pour la gestion des comptes autorisés...

Se que je souhaite faire, c'est franchir ce htaccess par l'intermédiaire d'un formulaire d'authentification et non par la fenêtre classique de cette technologie !

Je garde la technologie des session, qui est une contrainte de développement, car il nous est plus facile de personnaliser le site au convenance des utilisateur par l'intermédiaire des variable et de mysql.

Seulement, quand le client veux atteindre certain dossier, il doit se ré-authentifier par l'intermédiaire de la boite de dialogue du navigateur pour htaccess, alors qu'il était authentifier sur le site par php.

Ma problématique est d'additionner les deux en toute transparence tout en gardant mon formulaire comme seul et unique moyen de connexion, et non la boite de dialogue du navigateur.

Personnellement, j'ai essayé de pomper les codes du CRM, mais toutes les sources sont cryptés et nécéssitent des clés de licence pour être lisible, se qui nous a déjà coûté une lourde extension sur apache pour rendre le CRM compatible, mais nadat pour reproduire quoi que se soit !!!! HORS LE CRM PARVIENT A FAIRE SE QUE JE SOUHAITE !!! (CRM développer pour mon client et non mutualisé)
2
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
Bonjour,

Cet un vieux sujet de moi même mais vu que j'ai trouvé une solution, je l'expose quand même. Sa peu aider ceux qui souhaiterai réaliser un système similaire.

Pour franchir un htaccess sans l'authentification basic par le popup classique :

PHP n'est pas du tout la solution. AJAX par contre oui :

<script language="javascript"> 
<!--
function doRequest() 
{ 
	var url = "http://www.domaine.com/admin/"; 
	var xmlHttp;
	
	try
	{ 
		xmlHttp = new XMLHttpRequest(); 
	}
	
	catch (e) 
	{ 
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
	} 
	xmlHttp.open("GET", url, false, "login", "password"); 
	xmlHttp.send(null); 
	xmlHttp = null; 
	setTimeout(doRedirect,3000); 
} 
function doRedirect()
{
	var url = "http://www.domaine.com/admin/";
	location.replace(url);
}
window.onload = doRequest;
-->
</script>


Dans l'exemple, il suffit d'afficher la page pour être redirigé au bout de 3 secondes var le dossier "admin" que l'on sous entend protègé par .htaccess avec les identifiant "login" et "password".

Placer ce petit code dans les balises <head></head> et voila !!!

Testé Chome, IE7 et IE8 uniquement. (a voir pour les autres)
2
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
Cette méthode permes également de se connecter sur plusieurs dossier au travers de plusieurs login, se qui peut dans certain cas être extrêmement utile.

Combiné a la redirection d'url, mon site possède une double sécurité pour son interface console SESSION PHP + HTACCESS !
0
test124 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   4
 
1
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
Ok,

header('WWW-Authenticate: Basic realm="private"');

En alignant mon "realm" à mon AuthName (dans le fichier htaccess) j'arrive a faire que l'utilisateur se connecte par l'intermédiaire de la fenêtre de conexion que je veux supprimer, et peux a n'importe quel moment franchir le dossier administrator puis se que l'entête http est la bonne !

Je ne gagne rien comparé à le simple fait de m'authentifier par htaccess.

Est il possible de rajouter un login + password directement dans le header ?

header('WWW-Authenticate: Basic realm="private" login="user" pass="password") ?????
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Je ne comprend pas pourquoi tu veux garder ton .htaccess si tu utilises une session.
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
tu peux protéger un dossier par un .htaccess sans authentification par exemple pour empêcher l'accès à des fichiers de configuration

il suffit de mettre seulement

DenyForAll dans le .htaccess
(vérifies le libellé exact je te mets ça de mémoire)

personne ne pourra ecéder à ce dossier sauf les scripts php pour des include et toi en ftp bien sur
0
yot
 
On peut faire avec sa un fichier.php, qui contient des login et password avec sa , les inclure dans notre autre fichier tout en le protégeant, pas bête comme astuce, mais commment on fait si on veut pouvoir accèder au mot de passe pour les vérifier si on commence par l fenêtre d'authentification.
0
guismojames Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   6
 
Malheureusement, après divers recherche, et surtout, prise de renseignement auprès d'une communauté de professionnels, la manoeuvre tenté est impossible.

Je pensais que renseigner l'entête http (car c'est par ce biais que voyage le login htaccess) cela permettrai d'y intégrer l'authentification et ainsi, me permettrai de franchir htaccess ... Mais non !

PHP ne peut créer une entête complète, la fenêtre d'authentification reste présente, j'ai donc utiliser l'authentification basic derrière SSL et transférer tout cela a une session php.

Une seconde solution consiste dans le passage des variables de sessions par get dans l'url, celle-ci étant ensuite traité directement dans le fichier htaccess. Mais dans ce dernier cas, il faut un serveur apache sur linux compatible full htaccess et modifier efficacement et dynamiquement le(s) fichier(s) de mot de passe. (impossible sous apache/win32, qui est mon environnement d'exécution).

@++
0
matlamis
 
salut!

Moi j'ai la solution simple comme bonjour

1) Pour la solution il faut oublier htaccess pour ta page à proteger
2) tu protege ta page avec PHP.
3) solution.

Example:
A) Dans ton formulaire tu ajoute un INPUT.

<input type="hidden" name="un_nom" value="solution">

NB: ton formulaire devrai avoir comme Action="ta_page_à_proteger" et comme Method="Post"

Pour ton formulaire C tout.

B) Pour ta page à proteger

tu ajoute un scripte PHP avant.

<?php

function authenticate()
{
header('WWW-Authenticate: Basic realm="Authentication System"');
header('HTTP/1.0 401 Unauthorized');
echo "<center><font size=+4 color=red ><b>Vous devez entrer un identifiant et un mot de passe valide pour accéder à cette ressource.</b>";
exit;
}

if (!isset($_POST['un_nom'])==1)

{
authenticate();

}
else
{
unset ($_POST['un_nom']);
}
?>

ici ta page

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>

<body>
bla bla bla...............

</body>


</html>
C tout ta page est protegé avec un User et un mot de passe inconnue. avec le formulaire tu passe sans demande du authentification. pcq le scripte controle s'il ya $_Post['un_nom'] du formulaire.
solution touver moi meme.
NB: il ne faut pas utiliser htaccess et ta page doit avoir comme extension PHP
non html.
Voila la solution trouver par moi. Lamis
0
yot
 
Sans vouloir être offensant, ta solution est assez naze.
0