[RESOLU] Un identifiant et mot de passe à 30 000 000 clients.

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 : [RESOLU] Un identifiant et mot de passe à 30 000 000 clients.

Re: [RESOLU] Un identifiant et mot de passe à 30 000 000 cli

par Géryko » 28 mars 2014, 22:58

Bonsoir,
J'ai une solution qui malheureusement ne fonctionne qu'en local, pas sur FREE.

1) Tout ce qui était protégé par htaccess est mis en zone non protégée SAUF :
le fichier index_autorises.php PROTéGé .
2) Ce fichier index_autorises est accessible grâce à CURL (curler.php cité plus haut)
et me fournit la variable $_SESSION['autorise'] = true ; // membre autorisé = oui
3) Le test $_SESSION['autorise'] = true me permet d'accéder au reste des fichiers et dossiers
dans la zone non protégée.
--------------------------------
Et finalement, pour obtenir le même fonctionnement sur FREE, plutôt que d'utiliser CURL
et le fichier "curler.php", je me suis dit que si toutes les conditions étaient réunies
je pouvais autoriser directement l'accès aux pages non protégées, et seulement dans ce cas là.
Le détour par le fichier protégé index_autorises.php est inutile.
(sauf si un lien le désigne pour un accès via htaccess classique avec login et passwd)
Le test $_SESSION['autorise'] = true est maintenu et me permet d'accéder au reste des fichiers
et dossiers dans la zone non protégée.
Inconvénient : Mon cahier des charges n'est plus respecté.
Tous les fichiers et dossiers se trouvent en zone non protégés,
Les plus malins peuvent y accéder facilement.

Merci à sirakawa
Géryko

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 15 mars 2014, 10:30

Bonjour sirakawa,
La situation s'est nettement éclaircie, je vois le mécanisme, mais de sérieux problèmes subsistent.

1) La page "protégée" s'ouvre mais tous les liens y figurant ne fonctionnent plus.
Et pour cause, la page active dans ma barre est : "127.0.0.1/projets/curler.php", du print "$output";
il faudrait : "http://127.0.0.1/projects/protegepw_oto ... es.php?SID"
- Si je rectifie les adresses (les chemins) sur la page, ça fonctionne.

2) Il n'y a que cette page qui est "dévoilée" or c'est le dossier "les_autorises" qu'il faudrait rendre
accessible et ce, durant toute la session.

3) curler.php crée systématiquement une nouvelle session détruisant mes variables.
Pas trop grave, je dois pouvoir m'en accommoder.

4) J'ai supprimé le petit bloc <Directory ..... </Directory> dans httpd.conf
Aucun effet constaté. Donc je laisse ainsi.

Conclusions :
1) C'est déjà une avancée importante.
2) Cette technique peut permettre de donner accès à un fichier protégé par htaccess (voire plusieurs) mais
encore faut-il que ce fichier soit "spécialisé" et ne serve que dans cette condition.
Il est spécialisé dans la mesure où les liens de la pages (les chemins) sont prévus, adaptés, pour cette situation.
Ils sont à réadapter par rapport à ceux du fonctionnement normal.
3) Ne convient pas pour le cas que j'envisageais où je voulais accéder au dossier protégé complet.
4) Dommage. Aussi près du but !
Géryko

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 08 mars 2014, 20:59

S'il fournit un n"correct, au lieu d'afficher le login et le pass tu mets un formulaire
<form method = 'post' action = 'curler.php'>
 Vous avez tout gagné
<button type = 'submit'>Continuer</button>
</form>
et
curler.php

<?
PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/passes/index.html"); //il faut mettre entre les "" l'url du fichier à ouvrir chez toi
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "FGRCF:FGRCFAUSSI");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
print "$output";
$info = curl_getinfo($ch);
curl_c
lose($ch);
?>

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 08 mars 2014, 19:00

Bonjour sirakawa,

Je t'ai envoyé un Message Privé afin que tu puisses faire un test en réel sur FREE.

Réponse à ton message.
Oui c'est bien ce que j'avais fait avec "mon chemin et mon fichier" .
(je n'aurais pas dû faire un copier/coller de ton modèle)
J'avais mis C:/prog_gery\EasyPHP-DevServer-14.1VC9/data/localweb/projects/protegepw_oto/les_autorises/index_autorises.php
J'ai également testé :
http://localhost/projects/protegepw_oto ... orises.php ----> ; conformément à ma configuration.
http://127.0.0.1/projects/protegepw_oto ... orises.php
http://localhost/projects/protegepw_oto ... /index.php en créant un autre fichier index.php (au lieu de index_autorises.php)
C:/prog_gery\EasyPHP-DevServer-14.1VC9/data/localweb/projects/protegepw_oto/les_autorises/index.php en créant un autre fichier index.php
C:/prog_gery\EasyPHP-DevServer-14.1VC9/data/localweb/projects//html/index.php en créant un dossier html et un fichier index.php
et avec des fichiers index.html comme tu me l'as indiqué : sans succès.
Là je fais bêtement ce que tu me proposes.
Mais que doit-il se produire ?
Je ne comprends pas le mécanisme où tu m'emmènes, le but à atteindre.
Je rappelle que reconnais "mon client" grâce à sa réponse fournie dans un formulaire. (if (isset($_POST["envoyer"])))
Partant de là, je dois lui permettre d'accéder à localhost/projects/protegepw_oto/les_autorises/index_autorises.php
SANS qu'il soit obligé de saisir l'identifiant/passwd de htaccess.
Il faut donc dans ce même fichier php, (à titre d'exemple)
a) déverrouiller l'accès à index_autorises.php
b) faire une redirection ou quelque chose d'équivalent ?
ou les 2 à la fois : header('Location: http:// ...... /protegepw_oto/les_autorises/index_autorises.php?$Login&$Pass');

Chose que je ne vois pas dans tes explications, notamment le point b.
Lorsque je mets le petit "couplet CURL" sur l'index dans la page d'accueil, j'ai une erreur 401 (authentification)
mais à part cela il n'y a pas de blocage. Je peux consulter.
Admiration pour ta patience.

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 06 mars 2014, 12:14

<?PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/passes/index.html"); //il faut mettre entre les "" l'url du fichier à ouvrir chez toi
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "autorise:autor");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
print "$output";
$info = curl_getinfo($ch);
curl_close($ch);
?>

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 05 mars 2014, 12:55

Bonjour sirakawa,

Point 1 : Oui ça foncfionne. Avec ou sans la "partie rouge" dans httpd.conf
point 2 : Tu as raison, il y avait le nom du fichier en trop, (avec des slash et non des anti-slash)
J'ai mis <Directory "C:/prog_gery/EasyPHP-DevServer-14.1VC9/data/localweb/projects/protegepw_oto">
Mais ça ne change rien. Tu as bien remarqué que je l'avais mis dans :
# Virtual Hosts
## Virtualhost localweb
<VirtualHost 127.0.0.1>
DocumentRoot "C:/prog_gery/EasyPHP-DevServer-14.1VC9/data/localweb"
Je n'en étais pas sûr.

point 3 : OUI. Même si ça fonctionnne en local, sur FREE ce sera une autre affaire.
-
Si tu veux en rester là il faut me le dire. J'ai quand même appris pas mal de choses.
-
Si tu veux continuer, il me reste à voir le lien entre la réponse d'un client que j'ai identifiée comme valide
et lui ouvrir l'accès aux "pages privées".
En ce moment, je n'ai pas utilisé CURL, je n'ai rien modifié dans php.ini.
J'ai mis tes quelques lignes php dans mon fichier ... /projects/protegepw_oto/index_autorises.php
<?PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/passes/index.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "autorise:autor");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
print "$output";
$info = curl_getinfo($ch);
curl_close($ch);
?>
ça ne fait rien et je ne vois pas la suite.
Mon gros problème, je ne sais pas lire l'anglais pour bien apprendre.
Bien à toi.

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 04 mars 2014, 23:15

1) Si tu mets un document là:
C:/prog_gery/EasyPHP-DevServer-14.1VC9/data/localweb
Supposons qu'il s'appelle : test.html et qu'il contienne :
<html>
<body>
Je suis test.html
</body>
</html>
Y-as-tu accès en tapant comme url:
http:127.0.0.1/test.html
(si ça ne marche pas, tu peux essayer en virant la partie en rouge d eton php.ini)
2) Ta partie en rouge
<Directory "C:\prog_gery\EasyPHP-DevServer-14.1VC9\data\localweb\projects\protegepw_oto/.htpasswd">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ce serait pas plutot
<Directory "C:\prog_gery\EasyPHP-DevServer-14.1VC9\data\localweb\projects\protegepw_oto">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

3) Il ne faut pas s'exciter sur Free: puisqu'il mettent des .htaccess, c'est que le httpd.conf le permet...

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 04 mars 2014, 16:56

Bonjour sirakawa,

Je suis passé en PHP5 (EasyPHP-DevServer-14.1VC9) en local et sur le site FREE (avec php 1 dans un .htaccess sur la racine)
Aucun problème, sauf une instruction ereg à remplacer par preg_match.
Sur FREE il n'est pas possible d'accéder directement au fichier php.ini mais il serait possible de modifier certains paramètres à l'aide de commandes du genre : init_set() ou set_error_handler(); ou set_time_mimit(60).
Comment les passer ?
Dans ces conditions, je me propose de tester d'abord en local. Possible ?

Deuxième étape (en local sur EasyPHP) :
J'ai créé .httpasswd et les mes identifiant/passw (en MD5). ça fonctionne.

tu me dis " 3) index.html Code html <HTML> COUCOU </html> " ça représente quoi ? à mettre sur "protegepw_oto" ?

tu me dis "il faut vérifier httpd.conf (c'est AllowOverride All qui permet à .htaccess d'être pris en compte)
j'ai ajouté : ..... "
Voilà ce que j'ai fait dans httpd.conf: en bleu original, en rouge, partie que j'ai ajoutée :
======= situé à la fin du fichier =======
# Virtual Hosts
## Virtualhost localweb
<VirtualHost 127.0.0.1>
DocumentRoot "C:/prog_gery/EasyPHP-DevServer-14.1VC9/data/localweb"
ServerName 127.0.0.1
<Directory "C:/prog_gery/EasyPHP-DevServer-14.1VC9/data/localweb">
Options FollowSymLinks Indexes
AllowOverride All
Order deny,allow
Allow from 127.0.0.1
Deny from all
Require all granted
</Directory>


<Directory "C:\prog_gery\EasyPHP-DevServer-14.1VC9\data\localweb\projects\protegepw_oto/.htpasswd">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

</VirtualHost>
Include ../../data/conf/apache_virtual_hosts.conf

===== fin du httpd.conf ================

orgaisation de mon site, partant de Racine : EN LOCAL "C:\prog_gery\...... " (configuration type OVH et non FREE)
_____-dossier "projects" avec le fichier "index.php"
_________fichiers divers "xxxxxxxx.php"
_________-dossiers_publics (plusieurs)
_________- dossier "protegepw_oto" (dossier protégé pas htacess)
______________fichier ".htacess"
______________fichier ".htpasswd" // J'ai bien noté que ce n'était pas recommandé de le laisser là
______________-dossier "les_autorises"
__________________fichier "index_autorises.php"
__________________fichiers divers "yyyyyyyy.php"
__________________-dossiers_prives (plusieurs)
------------------------------------------------------------------------------------------------------------------------

Il doit me manquer quelque chose ou je n'ai pas tout compris. Je ne sais pas aller plus loin.

Si tu peux m'orienter .....
Merci.

PS : je viens de me rendre compte que dans httpd.conf j'ai des anti-slash ??? Je vais refaire des tests
16h55 Tests faits : exactement la même chose.

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 01 mars 2014, 22:00

ARCHITECTURE DU SERVEUR == ARCHITECTURE DE MON SERVEUR
/var/www/html/passes où passes est le répertoire à protéger"
en plusieurs endroits il y a des références à remplacer par ce qui correspond à ton architecture.

Est-ce que tu peux trouvfer un php.ini chez Free ?
Oui, il vaut mieux créer ole fichier htpassword avec le logiciel adapté

trouve sur le net (vca vaut quoi?)
Concernant free.fr :
Free a modifié son script pour que les mots de passe ne soient plus cryptés, en terme de sécurité c'est n'importe quoi mais bon que voulez-vous ?

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 01 mars 2014, 13:30

Bonjour sirakawa,

Là je pense que c'est à ma portée, mais n'allons pas trop vite. Certains points doivent être vérifiés :
1) Je n'ai pas encore muté vers php5. Est-ce que je peux le faire en php4 ? je pense que non.
(J'ai installé PHP5 (Easy php) sur un autre PC, mes tests ont démarré. C'est en cours)
2) Mon site est sur FREE et j'ai cru comprendre que FREE ne fonctionnait qu'en PHP4 ?
(J'ai posé la question sur le forum de free depuis 10 jours : pas de réponse)
Pour faire le test je pourrais y mettre une simple page index.php comprenant des fonctions php5
et un fichier .htaccess comprenant la ligne "AddType x-mapp-php5 .php" ou "SetEnv PHP_VER 5" ?
3) FREE a des fichiers htaccess un peu particuliers semble-t'il ?
(si je fais des modifs, ça risque de ne plus fonctionner mais il suffit de faire des essais)
4) Certains points de ta réponse sont encore un peu obscures mais je suis partant.

Première étape :
Voilà ce que j'ai vu sur phpinfo()
En local, je tourne avec EsayPHP1.8 PHP4 : pas de CURL.

En local sur un autre PC, php5
CURL support enabled
CURL Information 7.30.0

Sur le site de FREE donc en réel :
CURL support enabled
CURL Information libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
------------
Ci-dessous le contenu mes 3 fichiers htaccess imposés par FREE au départ.
1) mon .htaccess
PerlSetVar AuthFile /protegepw_oto/htpasswd.txt (où protegepw_oto représente le dossier protégé)
AuthName "Accès réservé aux adhérents"
AuthType Basic
require valid-user

2) mon .htacces (un seul s)
deny from all

3) mon htpasswd.txt (fichier.txt dans lequel on trouve les associations identifiant:mot_de_passe en clair)
log:1234
abcde:fghij
(en exemples)
--------

Tu me dis : "Voilà ce que j'ai fait:
ARCHITECTURE DU SERVEUR
/var/www/html/passes où passes est le répertoire à protéger"
C'est une information ou je dois mettre cette ligne dans htaccess en remplacement de PerlSetVar .....
Je n'ai pas compris.

Tu me dis :
".htpassword fabriqué avec : htpasswd -c .htpassword autorise"
Je n'ai jamais fait. Quel sera le codage/hachage ?
Je comprends la commande à faire (j'ai vu http://httpd.apache.org/docs/2.2/programs/htpasswd.html )
mais pour le mode console de la commande : htpasswd [path_htpasswd_file] [login]"
Comment s'y prendre ?
J'ai vu sur " http://aspirine.org/htpasswd.html" qu'il était possible de le créer manuellement mai je préfèrerais
ta méthode, à la console si j'ai bien compris.

Tu me dis :
" il faut vérifier httpd.conf (c'est AllowOverride All qui permet à .htaccess d'être pris en compte)
(commentaires commencant par # enlevés ici)
J'ai ajouté : .....<Directory "/var/www/html/passes"> ect .... </Directory>"
Je sais le faire sur mon PHP4 et sur mon PHP5 en local mais comment le vérifier sur FREE et surtout
comment le modifier sur FREE ?

C'est tout pour la 1ère étape.
Si tu trouves que je suis "trop lourd", n'hésite pas à me le dire. je m'arrêterai.
Merci

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 28 févr. 2014, 16:24

J'ai vu quelque chose, mais ça passe par curl (un module de php qui permet de se" connecter et de communiquer avec différents types de serveurs") .
Il faudrait essayer ça:
<?PHP
phpinfo();
?>
et regarder si tu as une partie CURL (inutile d"='aller plus loin que la constatation.)
Si tu l'as, je crois que tu es au bout de tes peines, sinon, il faudrait modifier l'installation de php.

OUFFFFF!
Voilà ce que j'ai fait:
ARCHITECTURE DU SERVEUR
/var/www/html/passes

passes est le répertoire à protéger
dans passes il y a:

.htaccess

Code : Tout sélectionner

AuthUserFile /var/www/html/passes/.htpassword AuthName "Restricted Access" AuthType Basic Require valid-user
.htpassword
fabriqué avec : htpasswd -c .htpassword autorise
(en étant dans le répertoire passes pour créer l'utilisateur autorise mot de passeautor)

index.html
<HTML>
COUCOU
</html>
Pour que .htaccess fonctionne, il faut vérifier httpd.conf (c'est AllowOverride All qui permet à .htaccess d'être pris en compte) (commentaires commencant par # enlevés ici)
J'ai ajouté :

Code : Tout sélectionner

<Directory "/var/www/html/passes"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
dans /var/www/html il y a index.php
<?PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/passes/index.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "autorise:autor");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
print "$output";
$info = curl_getinfo($ch);
curl_close($ch);
?>
Trois remarques:
I Comme je suis le roi des flemmards, j'ai mis .htpassword dans le répertoire protégé, ce que déconseille la doc d'Apache;
mais AuthUserFile /var/www/html/passes/.htpassword serait à remplacer par un chemin complet.
II Comme tu as démarré avec .htaccess, j'ai prolongé. Mais la doc Apache dit qu'on peut faire la même chose en plus rapide en créant dans httpd.conf une section <directory> plus sophistiquée que ce que j'ai fait.
III le mot de passe est mis en clair dans curl_setopt($ch, CURLOPT_USERPWD, "autorise:autor");

Si ça te convient, il faudrait peut-être mettre ta solution dans le forum contributions.

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 28 févr. 2014, 12:57

Bonjour sirakawa,
Je n'ai pas résisté à l'envie de savoir.

J'ai testé ton petit programme sur mon site, en situation réelle.
Il fonctionne mais il manque toujours l'étape finale de mise en relation du Login et de Pass, avec htaccess.
( tu les as mis dans les variables de session mais ça n'apporte rien)
Les opérations 1 à 7 de mon message précédent (du 25/02) fonctionnent déjà.
Grâce à ton post je peux maintenant résumer le problème à une ligne.

Est il possible de faire quelque chose qui réaliserait : (du point de vue fonction) ?

header('Location: http:// ...... /protegepw/lire.php?$Login&$Pass'); // avec lire.php protégé par htaccess

Rappel:
- Il n'est pas question de sécurité
- il s'agit de filtrer et de bloquer 99,9 % des visiteurs
- C'est le "cahier des charges" que je me suis fixé, un cas d'école.
Bien à toi
Géry

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 27 févr. 2014, 11:46

Bonjour sirakawa,
Merci pour ta réponse qui m'a réchauffé.
Cette fin de semaine est très chargée par ailleurs, laisse moi un peu de temps.
A+

Re: Un identifiant et mot de passe à 30 000 000 clients.

par sirakawa » 26 févr. 2014, 11:39

Non, je râlais parce que je trouvais ça extrêmement simple (c'est l'explication interminable qui donne l'impression que c'est compliqué).
Mais je n'interviens que sur des sujets qui m'intéressent ou m'amusent.
En lisant ta réponse, j'ai pensé à une autre solution.
Alors tu pourrais essayer ça (il n'y a guère qu'à compléter):
<form method = 'post' action = 'identifier.php'>
<label for 'identite'>Tapez votre zizifiant</label>
<!-- normalement avec required = 'required' le champ doit être rempli-->
<input type = 'text' name ='identite' required= 'required' />
<button type = 'submit'>M'envoyer en l'air</button>
</form>
identifier.php contient:
une fonction à rédiger tester_identite($identite)
le code php qui fait le travail : j'ai juste mis des exit mais onpeut ajouter un message, permettre un nouvel essai....
<?PHP
/**
Là je vais au plus simple
Je suppose que tu as une méthode pour repérer une identité juste : contient uncertain nombre de caractères + a tel caractère à une position précise... On verra après si tu trouves cette solutionà ton goût.
*/
function tester_identite ($identite)
{
	if ($identite == 1234)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}


/*normalement le required = 'required' devrait assurer que le champ a été rempli, mais sait-on jamais?*/
if ( isset($_POST['identite']))
{
	$identite = $_POST['identite'];
	//ici tu te débrouilles pour tester (résultat true ou false)
	$ok = tester_identite($identite);
	if ($ok == true)
	{
		session_start();
		$_SESSION['login'] = "reserve"; // mettre le login que tu as dans htaccess
		$_SESSION['passe'] = "&_6çt-è_ç%LMopi";//mettre le password que tu as dans htacess
		header('Location: http://localhost/tests/lire.php');	//juste besoin de changer 'url
	}
	else
	{
		exit;
	}

} 
else
{
exit;
}
?>
lire.php
<?PHP
session_start();
$login = $_SESSION['login'];
$passe = $_SESSION['passe'];
print "$login";
?>

Re: Un identifiant et mot de passe à 30 000 000 clients.

par Géryko » 26 févr. 2014, 11:00

Bonjour sirakawa

Ne sois pas fâché.
Je vois bien que tu as fait des tests et passé du temps sur le sujet. J'en suis gêné.
C'est simple, et même s'il n'y avait qu'une seule commande à ajouter, je ne sais pas faire ce que tu proposes.
Je ne sais même pas ce que veut dire : "se servir de gpg"
Je "joue" dans la cour des débutants, tout le monde m'a dit de passer en php5. Je vais le faire.
'
Par ailleurs, je suis toujours impressionné par le travail, la patience, le dévouement des intervenants de ce site.
Le temps que cela représente, sûrement en prenant sur leur vie privée.
Plus qu'un remerciement, je leur tire mon chapeau respectueusement.
Restons en là.
Cordialement