$auth = false;
if (isset( $PHP_AUTH_USER ) && isset($PHP_AUTH_PW))
{
// On lit le fichier où sont stockés les mots de passe
$filename = '.password';
$fp = fopen( $filename, 'r' );
$file_contents = fread( $fp, filesize( $filename ) );
fclose( $fp );
// On place chaque ligne dans un tableau
$lines = explode ( "\n", $file_contents );
// Chaque ligne correspond à une paire "username/password"
// On compare chaque paire à $PHP_AUTH_USER et $PHP_AUTH_PW.
foreach ( $lines as $line )
{
list( $username, $password ) = explode( ':', $line );
if ( ( $username == "$PHP_AUTH_USER" ) && ( $password == "$PHP_AUTH_PW" ) )
{
$auth = true;
break;
}
}
}
if ( ! $auth )
{
Header("WWW-Authenticate: Basic realm=\"Administration\"");
Header("HTTP/1.0 401 Unauthorized");
echo "<body background=\"../images/bg.gif\"><center><img src =
\"../images/interdit.png\"></center></body>";
exit;
}
else
{
header( 'Location: pft_liste.php' );
}
Sur un serveur ce script marche sans problème
sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à la page protégée alors que
bien sur dans le fichier .password le login/password n'est pas vide.
j'ai lu sur un site que :
" Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module
Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose problème, ceci dit serait ce un
symptome ???
dans ce cas existe t'il une autre solution de protection de page sachant que les htaccess ne sont
pas supportés sur le serveur ??
Bonjour, Que donne la commande phpinfo (INFO_ALL); ? Cordialement. Michel FOUILLADE
ftc
Bonjour, je rencontre un petit problème avec un petit script d'authentification visiblement classique : [SNIP]
Sur un serveur ce script marche sans problème sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à la page protégée alors que bien sur dans le fichier .password le login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD']
j'ai lu sur un site que : " Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache.
dans ce cas existe t'il une autre solution de protection de page sachant que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe.
Bonjour,
je rencontre un petit problème avec un petit script d'authentification
visiblement classique :
[SNIP]
Sur un serveur ce script marche sans problème
sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à
la page protégée alors que bien sur dans le fichier .password le
login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par
$_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD']
j'ai lu sur un site que :
" Les fonctions d'identification HTTP de PHP ne sont disponibles que si
PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose
problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache.
dans ce cas existe t'il une autre solution de protection de page sachant
que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement
un formulaire avec un champs login et un champs mot de passe.
Bonjour, je rencontre un petit problème avec un petit script d'authentification visiblement classique : [SNIP]
Sur un serveur ce script marche sans problème sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à la page protégée alors que bien sur dans le fichier .password le login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD']
j'ai lu sur un site que : " Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache.
dans ce cas existe t'il une autre solution de protection de page sachant que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe.
John Gallet
Bonjour,
visiblement classique : Oui malheureusement ça fait des années qu'on le répète.
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Ducros, décarcasse, tout ça. JG
Olivier Miakinen
exit; } else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu.
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : - une redirection interdite mais fréquente (url relative) ; - un truc débile en termes de perfs (déménageur, toussa) ; - une faille de sécurité. Rien de bien grave, en somme.
;-)
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
exit;
}
else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu.
{
header( 'Location: pft_liste.php' );
}
Et n'importe quel blaireau demande directement http://..../ptf_liste.php
et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') »
mais son doigt a dérapé et le coup est parti tout seul, avec comme
conséquences :
- une redirection interdite mais fréquente (url relative) ;
- un truc débile en termes de perfs (déménageur, toussa) ;
- une faille de sécurité.
Rien de bien grave, en somme.
;-)
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu.
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : - une redirection interdite mais fréquente (url relative) ; - un truc débile en termes de perfs (déménageur, toussa) ; - une faille de sécurité. Rien de bien grave, en somme.
;-)
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Pascal
exit; } else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu. tu m'expliques ??
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : - une redirection interdite mais fréquente (url relative) ; - un truc débile en termes de perfs (déménageur, toussa) ; - une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
;-)
exit;
}
else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu.
tu m'expliques ??
{
header( 'Location: pft_liste.php' );
}
Et n'importe quel blaireau demande directement http://..../ptf_liste.php
et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') »
mais son doigt a dérapé et le coup est parti tout seul, avec comme
conséquences :
- une redirection interdite mais fréquente (url relative) ;
- un truc débile en termes de perfs (déménageur, toussa) ;
- une faille de sécurité.
Rien de bien grave, en somme.
tu m'expliques ??
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
Ah oui, bien vu. tu m'expliques ??
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : - une redirection interdite mais fréquente (url relative) ; - un truc débile en termes de perfs (déménageur, toussa) ; - une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
;-)
Pascal
Tout d'abord merci pour ta réponse.
Sur un serveur ce script marche sans problème sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à la page protégée alors que bien sur dans le fichier .password le login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD'] d'accord
j'ai lu sur un site que : " Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache. La fonction phpinfo a été désactivée du serveur, je n'ai d'ailleurs pas accès à celui-ci
dans ce cas existe t'il une autre solution de protection de page sachant que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe.
d'autres personnes m'ont répondu que c'était du n'importe quoi sans me donner vraiment de pistes alors encore merci pour ta réponse
Tout d'abord merci pour ta réponse.
Sur un serveur ce script marche sans problème
sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à
la page protégée alors que bien sur dans le fichier .password le
login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par
$_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD']
d'accord
j'ai lu sur un site que :
" Les fonctions d'identification HTTP de PHP ne sont disponibles que si
PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose
problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache.
La fonction phpinfo a été désactivée du serveur, je n'ai d'ailleurs pas accès à celui-ci
dans ce cas existe t'il une autre solution de protection de page sachant
que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement
un formulaire avec un champs login et un champs mot de passe.
d'autres personnes m'ont répondu que c'était du n'importe quoi sans me donner vraiment de pistes
alors encore merci pour ta réponse
Sur un serveur ce script marche sans problème sur un autre lorsque je laisse les champs vides j'ai malgré tout accès à la page protégée alors que bien sur dans le fichier .password le login/password n'est pas vide.
Commence par remplacer $PHP_AUTH_USER et $PHP_AUTH_PASSWORD par $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PASSWORD'] d'accord
j'ai lu sur un site que : " Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI"
je ne sais pas comment est installé php sur le serveur qui me pose problème, ceci dit serait ce un symptome ???
phpinfo() t'indiquera si tu es en CGI ou module Apache. La fonction phpinfo a été désactivée du serveur, je n'ai d'ailleurs pas accès à celui-ci
dans ce cas existe t'il une autre solution de protection de page sachant que les htaccess ne sont pas supportés sur le serveur ??
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe.
d'autres personnes m'ont répondu que c'était du n'importe quoi sans me donner vraiment de pistes alors encore merci pour ta réponse
Olivier Miakinen
exit; } else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
tu m'expliques ??
Sachant que « exit; » quitte le script, quand tu as :
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : 1) une redirection interdite mais fréquente (url relative) ; 2) un truc débile en termes de perfs (déménageur, toussa) ; 3) une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>.
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. (2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. (3) Cf. réponse de John. ... mais cela ne fait que détailler ce qui est dans la FAQ
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
exit;
}
else
(Ne sert à rien à part à compliquer l'écriture, on a un exit au dessus)
tu m'expliques ??
Sachant que « exit; » quitte le script, quand tu as :
Et n'importe quel blaireau demande directement http://..../ptf_liste.php
et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') »
mais son doigt a dérapé et le coup est parti tout seul, avec comme
conséquences :
1) une redirection interdite mais fréquente (url relative) ;
2) un truc débile en termes de perfs (déménageur, toussa) ;
3) une faille de sécurité.
Rien de bien grave, en somme.
tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>.
Points particuliers :
(1) La norme HTTP impose une URL absolue dans l'entête Location.
(2) Chercher dans les archives du groupe l'histoire du déménageur ou
du livreur de frigo.
(3) Cf. réponse de John.
... mais cela ne fait que détailler ce qui est dans la FAQ
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : 1) une redirection interdite mais fréquente (url relative) ; 2) un truc débile en termes de perfs (déménageur, toussa) ; 3) une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>.
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. (2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. (3) Cf. réponse de John. ... mais cela ne fait que détailler ce qui est dans la FAQ
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Pascal
Merci pour "la réponse qui explique" (cf "la réponse qui bache")
Sachant que « exit; » quitte le script, quand tu as :
if (...) { machin; truc; exit; } bidule; chose; n'y voit aucune ironie de ma part car je n suis réellement pas un pro de la programmation comme tu
as pu le constater. je ne voit pas la différence entre les deux exemples. Tu veux dire que dans mon script le else n'est pas lu à cause du exit ? mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il y a aussi exit avant
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass. oui effectivement, mais dans ma grande naïveté le blaireau moyen ne connait pas l'existance de cette
page. Apparemment je me gourre grave !! ;-)
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : 1) une redirection interdite mais fréquente (url relative) ; 2) un truc débile en termes de perfs (déménageur, toussa) ; 3) une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>. J'ai lu la faq, j'ai pas super bien compris la faille que occasionne cette url relative snirf
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. je l'appliquerai dorénavant
(2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. pas trouvée
(3) Cf. réponse de John. ... mais cela ne fait que détailler ce qui est dans la FAQ
merci
Merci pour "la réponse qui explique" (cf "la réponse qui bache")
Sachant que « exit; » quitte le script, quand tu as :
if (...) {
machin;
truc;
exit;
}
bidule;
chose;
n'y voit aucune ironie de ma part car je n suis réellement pas un pro de la programmation comme tu
as pu le constater.
je ne voit pas la différence entre les deux exemples.
Tu veux dire que dans mon script le else n'est pas lu à cause du exit ?
mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il y a aussi exit avant
{
header( 'Location: pft_liste.php' );
}
Et n'importe quel blaireau demande directement http://..../ptf_liste.php
et n'a pas besoin de login/pass.
oui effectivement, mais dans ma grande naïveté le blaireau moyen ne connait pas l'existance de cette
page.
Apparemment je me gourre grave !! ;-)
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') »
mais son doigt a dérapé et le coup est parti tout seul, avec comme
conséquences :
1) une redirection interdite mais fréquente (url relative) ;
2) un truc débile en termes de perfs (déménageur, toussa) ;
3) une faille de sécurité.
Rien de bien grave, en somme.
tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>.
J'ai lu la faq, j'ai pas super bien compris la faille que occasionne cette url relative snirf
Points particuliers :
(1) La norme HTTP impose une URL absolue dans l'entête Location.
je l'appliquerai dorénavant
(2) Chercher dans les archives du groupe l'histoire du déménageur ou
du livreur de frigo.
pas trouvée
(3) Cf. réponse de John.
... mais cela ne fait que détailler ce qui est dans la FAQ
if (...) { machin; truc; exit; } bidule; chose; n'y voit aucune ironie de ma part car je n suis réellement pas un pro de la programmation comme tu
as pu le constater. je ne voit pas la différence entre les deux exemples. Tu veux dire que dans mon script le else n'est pas lu à cause du exit ? mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il y a aussi exit avant
{ header( 'Location: pft_liste.php' ); }
Et n'importe quel blaireau demande directement http://..../ptf_liste.php et n'a pas besoin de login/pass. oui effectivement, mais dans ma grande naïveté le blaireau moyen ne connait pas l'existance de cette
page. Apparemment je me gourre grave !! ;-)
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » mais son doigt a dérapé et le coup est parti tout seul, avec comme conséquences : 1) une redirection interdite mais fréquente (url relative) ; 2) un truc débile en termes de perfs (déménageur, toussa) ; 3) une faille de sécurité. Rien de bien grave, en somme. tu m'expliques ??
Réponse globale : voir la FAQ <http://faqfclphp.free.fr/#rub2.11>. J'ai lu la faq, j'ai pas super bien compris la faille que occasionne cette url relative snirf
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. je l'appliquerai dorénavant
(2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. pas trouvée
(3) Cf. réponse de John. ... mais cela ne fait que détailler ce qui est dans la FAQ
merci
John Gallet
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe. d'autres personnes m'ont répondu que c'était du n'importe quoi sans me
donner vraiment de pistes alors encore merci pour ta réponse
Le problème n'est pas la partie du refus, le problème c'est que ta vérification se contourne en douze secondes. Mais en effet, autant générer la page de login/pass.
a++; JG
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement
un formulaire avec un champs login et un champs mot de passe.
d'autres personnes m'ont répondu que c'était du n'importe quoi sans me
donner vraiment de pistes alors encore merci pour ta réponse
Le problème n'est pas la partie du refus, le problème c'est que ta
vérification se contourne en douze secondes. Mais en effet, autant
générer la page de login/pass.
Au lieu de renvoyé "HTTP/1.0 401 Unauthorized", renvoi tout simplement un formulaire avec un champs login et un champs mot de passe. d'autres personnes m'ont répondu que c'était du n'importe quoi sans me
donner vraiment de pistes alors encore merci pour ta réponse
Le problème n'est pas la partie du refus, le problème c'est que ta vérification se contourne en douze secondes. Mais en effet, autant générer la page de login/pass.
a++; JG
John Gallet
Merci pour "la réponse qui explique" (cf "la réponse qui bache")
Ca fait des années qu'on le répète, un petit coup d'archives te donnera toutes les explications nécessaires. Même la simple lecture de la FAQ du forum (je rappelle une des règles de base de Usenet : on ne poste pas dans un forum, surtout modéré, sans avoir lu sa Charte et sa FAQ) te donnait des éléments de réponse.
je ne voit pas la différence entre les deux exemples. Tu veux dire que dans mon script le else n'est pas lu à cause du exit ? mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il y a aussi exit avant Tout vient des accolades. Un bloc {} délimite des instructions
regroupées ensemble. Quand tu fais un : if(condition) { instructions } alors ces instructions là ne seront exécutées quand dans le cas où la condition est vraie. Que l'une de ces instructions soit "exit" n'a aucune importance, c'est une instruction comme une autre. Elle ne sera exécutée *que* dans le cas où la condition est vraie. Et ensuite on reprend le code en dessous de l'} que la condition soit vraie ou non. Donc ton else {} est parfaitement justifié si la dernière instruction du if n'est pas exit. Mais là en l'occurence, vu que tu indiques bien que le script va s'arrêter, inutile (au sens : ça complique l'écriture) de s'emmêler les crayons à réindenter le code en bloc else qui n'a pas lieu d'être. Mais c'est pas bien grave, juste de la simplicité d'écriture.
oui effectivement, mais dans ma grande naïveté le blaireau moyen ne connait pas l'existance de cette page. Apparemment je me gourre grave !! ;-) Regarde toi même l'URL dans ton navigateur quand tu fournis un
login/pass valides : tu verras que la page est bien ptf_liste.php donc dès lors que quelqu'un connait le nom de la page, il lui suffit de l'appeler.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » Et attention, ça ne suffira pas s'il n'y a pas un mécanisme empêchant
d'appeler directement ledit fichier si on arrive à deviner son nom. Par exemple en définissant une constante (pas une variable) dans le script qui vérifie le login/pass et en testant if(!defined('MACONSTANTE'))exit(); dans le script inclus.
Tiens quitte à chipoter, on devrait même écrire require('pft_liste.php'); parce que si le fichier n'est pas là, il n'y a aucune raison que le script continue, et on n'en est plus aux optimisations "à la php3".
2) un truc débile en termes de perfs (déménageur, toussa) ; En l'occurence la MALC que je fais est avec une machine à laver, pas un
frigo. Tiens au hasard : http://groups.google.com/group/fr.comp.lang.php/browse_thread/thread/ca2e5ca0ce8584a5/ (datant de mai 2003... Quand je disais que ça fait des années...)
J'ai lu la faq, j'ai pas super bien compris la faille que occasionne cette url relative snirf (Relative ou absolue, peu importe pour la sécurité)
Très simple : dès lors que je connais le nom de la page à appeler, rien ni personne ne pourra m'empêcher de l'appeler en lui passant les paramètres que je veux. En boucle si je veux. En GET, en POST, etc... De plus, là tu ne renvoie pas de données par Location:http....toto.php?login=$login&pass=$pass mais si ceci était fait, par dessus le marché, comme ceci est une requête GET, les login/pass sont inscrits en clair dans les logs du serveur http...
Jette un oeil sur un peu de ma prose, http://www.saphirtech.com/ en bas, il y a un pdf pour un cours "normal" et une partie sécurité (qu'il faut que je modifie, mais c'est pas mal pour une vue d'ensemble des emmerdements possibles).
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. je l'appliquerai dorénavant
Ce qu'il faudrait appliquer surtout c'est de ne pas employer header
Location si ce n'est pas vraiment utile.
(2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. pas trouvée
/frigo//machine à laver/
a++; JG
Merci pour "la réponse qui explique" (cf "la réponse qui bache")
Ca fait des années qu'on le répète, un petit coup d'archives te donnera
toutes les explications nécessaires. Même la simple lecture de la FAQ du
forum (je rappelle une des règles de base de Usenet : on ne poste pas
dans un forum, surtout modéré, sans avoir lu sa Charte et sa FAQ) te
donnait des éléments de réponse.
je ne voit pas la différence entre les deux exemples.
Tu veux dire que dans mon script le else n'est pas lu à cause du exit ?
mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il
y a aussi exit avant
Tout vient des accolades. Un bloc {} délimite des instructions
regroupées ensemble. Quand tu fais un :
if(condition)
{
instructions
}
alors ces instructions là ne seront exécutées quand dans le cas où la
condition est vraie. Que l'une de ces instructions soit "exit" n'a
aucune importance, c'est une instruction comme une autre. Elle ne sera
exécutée *que* dans le cas où la condition est vraie. Et ensuite on
reprend le code en dessous de l'} que la condition soit vraie ou non.
Donc ton else {} est parfaitement justifié si la dernière instruction du
if n'est pas exit. Mais là en l'occurence, vu que tu indiques bien que
le script va s'arrêter, inutile (au sens : ça complique l'écriture) de
s'emmêler les crayons à réindenter le code en bloc else qui n'a pas lieu
d'être. Mais c'est pas bien grave, juste de la simplicité d'écriture.
oui effectivement, mais dans ma grande naïveté le blaireau moyen ne
connait pas l'existance de cette page.
Apparemment je me gourre grave !! ;-)
Regarde toi même l'URL dans ton navigateur quand tu fournis un
login/pass valides : tu verras que la page est bien ptf_liste.php donc
dès lors que quelqu'un connait le nom de la page, il lui suffit de
l'appeler.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') »
Et attention, ça ne suffira pas s'il n'y a pas un mécanisme empêchant
d'appeler directement ledit fichier si on arrive à deviner son nom. Par
exemple en définissant une constante (pas une variable) dans le script
qui vérifie le login/pass et en testant
if(!defined('MACONSTANTE'))exit(); dans le script inclus.
Tiens quitte à chipoter, on devrait même écrire
require('pft_liste.php'); parce que si le fichier n'est pas là, il n'y a
aucune raison que le script continue, et on n'en est plus aux
optimisations "à la php3".
2) un truc débile en termes de perfs (déménageur, toussa) ;
En l'occurence la MALC que je fais est avec une machine à laver, pas un
frigo. Tiens au hasard :
http://groups.google.com/group/fr.comp.lang.php/browse_thread/thread/ca2e5ca0ce8584a5/
(datant de mai 2003... Quand je disais que ça fait des années...)
J'ai lu la faq, j'ai pas super bien compris la faille que occasionne
cette url relative snirf
(Relative ou absolue, peu importe pour la sécurité)
Très simple : dès lors que je connais le nom de la page à appeler, rien
ni personne ne pourra m'empêcher de l'appeler en lui passant les
paramètres que je veux. En boucle si je veux. En GET, en POST, etc... De
plus, là tu ne renvoie pas de données par
Location:http....toto.php?login=$login&pass=$pass mais si ceci était
fait, par dessus le marché, comme ceci est une requête GET, les
login/pass sont inscrits en clair dans les logs du serveur http...
Jette un oeil sur un peu de ma prose, http://www.saphirtech.com/ en bas,
il y a un pdf pour un cours "normal" et une partie sécurité (qu'il faut
que je modifie, mais c'est pas mal pour une vue d'ensemble des
emmerdements possibles).
Points particuliers :
(1) La norme HTTP impose une URL absolue dans l'entête Location.
je l'appliquerai dorénavant
Ce qu'il faudrait appliquer surtout c'est de ne pas employer header
Location si ce n'est pas vraiment utile.
(2) Chercher dans les archives du groupe l'histoire du déménageur ou
du livreur de frigo.
pas trouvée
Merci pour "la réponse qui explique" (cf "la réponse qui bache")
Ca fait des années qu'on le répète, un petit coup d'archives te donnera toutes les explications nécessaires. Même la simple lecture de la FAQ du forum (je rappelle une des règles de base de Usenet : on ne poste pas dans un forum, surtout modéré, sans avoir lu sa Charte et sa FAQ) te donnait des éléments de réponse.
je ne voit pas la différence entre les deux exemples. Tu veux dire que dans mon script le else n'est pas lu à cause du exit ? mais alors pourquoi dans le tiens bidule et chose sont lus alors qu'il y a aussi exit avant Tout vient des accolades. Un bloc {} délimite des instructions
regroupées ensemble. Quand tu fais un : if(condition) { instructions } alors ces instructions là ne seront exécutées quand dans le cas où la condition est vraie. Que l'une de ces instructions soit "exit" n'a aucune importance, c'est une instruction comme une autre. Elle ne sera exécutée *que* dans le cas où la condition est vraie. Et ensuite on reprend le code en dessous de l'} que la condition soit vraie ou non. Donc ton else {} est parfaitement justifié si la dernière instruction du if n'est pas exit. Mais là en l'occurence, vu que tu indiques bien que le script va s'arrêter, inutile (au sens : ça complique l'écriture) de s'emmêler les crayons à réindenter le code en bloc else qui n'a pas lieu d'être. Mais c'est pas bien grave, juste de la simplicité d'écriture.
oui effectivement, mais dans ma grande naïveté le blaireau moyen ne connait pas l'existance de cette page. Apparemment je me gourre grave !! ;-) Regarde toi même l'URL dans ton navigateur quand tu fournis un
login/pass valides : tu verras que la page est bien ptf_liste.php donc dès lors que quelqu'un connait le nom de la page, il lui suffit de l'appeler.
Il s'est juste gouré. Il voulait écrire « include('pft_liste.php') » Et attention, ça ne suffira pas s'il n'y a pas un mécanisme empêchant
d'appeler directement ledit fichier si on arrive à deviner son nom. Par exemple en définissant une constante (pas une variable) dans le script qui vérifie le login/pass et en testant if(!defined('MACONSTANTE'))exit(); dans le script inclus.
Tiens quitte à chipoter, on devrait même écrire require('pft_liste.php'); parce que si le fichier n'est pas là, il n'y a aucune raison que le script continue, et on n'en est plus aux optimisations "à la php3".
2) un truc débile en termes de perfs (déménageur, toussa) ; En l'occurence la MALC que je fais est avec une machine à laver, pas un
frigo. Tiens au hasard : http://groups.google.com/group/fr.comp.lang.php/browse_thread/thread/ca2e5ca0ce8584a5/ (datant de mai 2003... Quand je disais que ça fait des années...)
J'ai lu la faq, j'ai pas super bien compris la faille que occasionne cette url relative snirf (Relative ou absolue, peu importe pour la sécurité)
Très simple : dès lors que je connais le nom de la page à appeler, rien ni personne ne pourra m'empêcher de l'appeler en lui passant les paramètres que je veux. En boucle si je veux. En GET, en POST, etc... De plus, là tu ne renvoie pas de données par Location:http....toto.php?login=$login&pass=$pass mais si ceci était fait, par dessus le marché, comme ceci est une requête GET, les login/pass sont inscrits en clair dans les logs du serveur http...
Jette un oeil sur un peu de ma prose, http://www.saphirtech.com/ en bas, il y a un pdf pour un cours "normal" et une partie sécurité (qu'il faut que je modifie, mais c'est pas mal pour une vue d'ensemble des emmerdements possibles).
Points particuliers : (1) La norme HTTP impose une URL absolue dans l'entête Location. je l'appliquerai dorénavant
Ce qu'il faudrait appliquer surtout c'est de ne pas employer header
Location si ce n'est pas vraiment utile.
(2) Chercher dans les archives du groupe l'histoire du déménageur ou du livreur de frigo. pas trouvée