Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

site securise

19 réponses
Avatar
Legeais Vincent
Bonjour,

Je souhaite faire un site donc l'accès se fera par login et mot de passe
aux seules personnes à qui j'aurai donné des identifiants.

Actuellement je sais faire 2 choses :

* soit gérer l'accès en mettant un .htaccess dès la racine.
Donc là, pas de problème, tout le contenu du site est protégé.

Mais je ne trouve pas jolie (esthétique) cette méthode
C'est pour cela que je préfère ma deuxième solution :

* mettre un formulaire dans lequel le visiteur met ses identifiants,
puis je vérifie dans la base de données et si oui je valide l'accès.
Par contre à chacune de mes pages je suis obligé de vérifier si la
personne y a accès...
Pour cela j'ai une variable de session, et de plus toutes mes pages sont
de la forme index.php?page=toto avec toto qui appelle la page inc/titi.php.
Le répertoire inc/ est protégé par un .htaccess "deny from all"

Donc tout va bien avec cette méthode (tout est bien protégé, et je peux
faire joli comme je veux (mieux en tout cas que la boîte du htaccess !)

Le seul problème est pour les fichiers multimédia (images, sons, vidéos).
Si je met un .htaccess "deny from all" sur le répertoire images/ alors
ça refuse l'affichage (normal puisque les images sont appelées par un
requête html).
Il en est de même pour les fichiers de style .css
(je me contente de mettre un index avec "header("Location: ..");" dans
ces répertoires, mais rien n'empêche un accès direct au fichier...)

Est-ce que quelqu'un aurait une solution pour garder l'accès avec
formulaire et vérification dans la base de données *et* que *tous* les
fichiers soient protégés ?

Merci

X-post : fr.comp.lang.php & alt.fr.comp.lang.php
fu2 : fr.comp.lang.php

--
Vincent

9 réponses

1 2
Avatar
Legeais Vincent
Je souhaite faire un site donc l'accès se fera par login et mot de passe
aux seules personnes à qui j'aurai donné des identifiants.
[...]
Le seul problème est pour les fichiers multimédia (images, sons, vidéos).


Comment font les sites du genre banque ou webmail ?
Je suppose que les pièces jointes aux mail lus dans les webmail sont
inaccessibles à tous, sauf le possesseur de l'adresse e-mail ?
Et de même pour les comptes banquaires !

Est-ce la technique que P'tit Marcel ou Thief13 propose ?

--
Vincent

Avatar
Mihamina Rakotomandimby (R12y)
Legeais Vincent wrote:

Je souhaite faire un site donc l'accès se fera par login et mot de passe
aux seules personnes à qui j'aurai donné des identifiants.
[...]
Le seul problème est pour les fichiers multimédia (images, sons, vidéos).
Comment font les sites du genre banque ou webmail ?

Je suppose que les pièces jointes aux mail lus dans les webmail sont
inaccessibles à tous, sauf le possesseur de l'adresse e-mail ?
Et de même pour les comptes banquaires !


Je fait suivre sur un groupe plus adapté: fr.comp.infosystemes.www.serveurs.
D'abord, pour les mail et tout ça, il y a souvent un serveur IMAP entre les
mails+PJ et le serveur Web.


Avatar
Thief13
Pour le header, je vois.
Mais ensuite je ne vois pas du tout...
Je remplace :

$image = imageCreateFromJpeg($source);
imageJpeg($image);

par quoi ?
Je suppose que ces instructions ne sont valides que pour une image ?



essaye un truc du genre :

<?php

// test des droit
// si pas bon, exit

$ficher = file_get_contents('repertoirprotege/fichier.xxx');

header("content-type:[mime-type]");

echo $ficher;

?>

Avatar
Legeais Vincent
essaye un truc du genre :

<?php

// test des droit
// si pas bon, exit

$ficher = file_get_contents('repertoirprotege/fichier.xxx');

header("content-type:[mime-type]");

echo $ficher;

?>


Mon script appelant :
<a href=lire-fichier.php?fic=fichier.xls>fichier</a>

Le fichier lire-fichier.php :
<?
$fichier = file_get_contents($fic);
header("content-type:application/octet-stream");
echo $fichier;
?>

(le header est-il bon ?
Ca me propose d'ouvrir "lire-fichier.php" avec le bloc note... et donc
je ne vois pas le fichier fichier.xls.
Par contre si j'impose l'ouverture avec Excel, et non pas le bloc note,
alors ça m'ouvre le fichier Excel... sous le nom "lire-fichier-1.php"

Cela n'est donc évidement pas satisfaisant...

...
J'ai essayé d'autres header :
application/excel --> pas mieux
application/x-msexcel --> mieux !!!
En effet ça force à ouvrir avec Excel...
Par contre le nom du fichier est "lire-fichier-1.php.xls" au lieu de
"fichier.xls" à l'ouverture et "lire-fichier-1.php" au téléchargement
(donc perte de l'extension, ce qui est très gênant pour le visiteur...)

Peut-on imposer le nom ?
J'ai essayé de rajouter dans le header : name="$fic" ou
filename="$fic" mais rien n'y fait...

Et surtout :
Cette méthode oblige d'avoir un fichier lire-fichier-excel.php et
lire-fichier-word.php et lire-fichier-xxx.php ...
N'est-il pas possible de tout faire en un ?
(c'est fonction mimeTypes proposée par Philipp Heckel dans les notes du
manuel ici: http://fr.php.net/readfile ?)

Merci

--
Vincent

Avatar
Legeais Vincent
et le script objet.php est du genre :

header('Content-Type: application/octet-stream');
header("Content-Length: ".filesize($fichier_complet));
readfile($fichier_complet);

Il faudrait aussi positionner le type mime par un autre header().


OK pour le header

Par contre, comme je le dis dans mon message posté à 20hxx en réponse à
celui de Thief13 (qu'il a posté à 11h25 ce jour (04/06/2007)) :
Il y a un problème pour le nom du fichier :
le fichier proposé au téléchargement s'appelle objet.php et nom pas
fichier.ext
Ce qui impose au visiteur de renommer... ce n'est donc pas acceptable...

Comment faire ?

Merci

--
Vincent

Avatar
Thomas Labourdette
Legeais Vincent a écrit le lundi 4 juin 2007 23:06 :


Peut-on imposer le nom ?
J'ai essayé de rajouter dans le header : name="$fic" ou
filename="$fic" mais rien n'y fait...



Pour imposer le nom, tu peux ajouter l'entête :
Content-disposition: "attachment; filename='nom_du_fichier.machin'"

@+
--
Théophile ROUGE (signature et citation aléatoires)
7 semaines : Qu'est-ce que tu veux boire ?
7 mois : Je prendrais bien un Martini
7 ans : T'as encore oublié les glaçons !

Avatar
Legeais Vincent
Legeais Vincent a écrit le lundi 4 juin 2007 23:06 :

Peut-on imposer le nom ?
J'ai essayé de rajouter dans le header : name="$fic" ou
filename="$fic" mais rien n'y fait...


Pour imposer le nom, tu peux ajouter l'entête :
Content-disposition: "attachment; filename='nom_du_fichier.machin'"


Merci.
header("Content-disposition:attachment;filename=$fic");
fonctionne, avec $fic le nom de mon fichier

Quand je clic ça ouvre le fenêtre qui demande ouvrir / enregistrer et là
il n'y a pas de problème !

Le seul truc c'est quand je fais un clic droit / enregistrer le lien
sous... car ça enregistre le fichier de script php !!!

Merci à tous pour vos bons conseils

--
Vincent


Avatar
Olivier Miakinen

Peut-on imposer le nom ?
J'ai essayé de rajouter dans le header : name="$fic" ou
filename="$fic" mais rien n'y fait...


Pour imposer le nom, tu peux ajouter l'entête :
Content-disposition: "attachment; filename='nom_du_fichier.machin'"


Merci.
header("Content-disposition:attachment;filename=$fic");
fonctionne, avec $fic le nom de mon fichier

Quand je clic ça ouvre le fenêtre qui demande ouvrir / enregistrer et là
il n'y a pas de problème !

Le seul truc c'est quand je fais un clic droit / enregistrer le lien
sous... car ça enregistre le fichier de script php !!!


1) Que vaut $fic ?
2) Quel est le nom du script PHP ?
3) Avec quel(s) navigateurs(s) as-tu essayé ?
4) Tu as une adresse pour qu'on essaye aussi ?



Avatar
Legeais Vincent
Peut-on imposer le nom ?
J'ai essayé de rajouter dans le header : name="$fic" ou
filename="$fic" mais rien n'y fait...
Pour imposer le nom, tu peux ajouter l'entête :

Content-disposition: "attachment; filename='nom_du_fichier.machin'"
Merci.

header("Content-disposition:attachment;filename=$fic");
fonctionne, avec $fic le nom de mon fichier

Quand je clic ça ouvre le fenêtre qui demande ouvrir / enregistrer et là
il n'y a pas de problème !

Le seul truc c'est quand je fais un clic droit / enregistrer le lien
sous... car ça enregistre le fichier de script php !!!


1) Que vaut $fic ?
2) Quel est le nom du script PHP ?
3) Avec quel(s) navigateurs(s) as-tu essayé ?
4) Tu as une adresse pour qu'on essaye aussi ?


4) non, car je fais juste un test en local avec easyphp
3) Firefox 1.5
1) et 2) :
J'ai un script lire.php :
<?
<a href=lire-fichier.php?fic=fichier.xls>fichier</a>
?>
Et le script lire-fichier.php :
<?
header('Content-Type: application/x-msexcel');
header("Content-disposition:attachment;filename=$fic");
readfile($fic);
?>
[$fic devrait subir un GET... mais là je suis dans le test donc ce n'est
pas grave...]

Il ne reste plus qu'à rajouter la fonction mimeTypes proposée par
Philipp Heckel dans les notes du manuel ici: http://fr.php.net/readfile
(merci P'tit Marcel) pour que le Content-Type se mette tout seul quelque
soit le type de fichier...

Tout ceci répond parfaitement à mon problème.
Merci

Et quand je disais :
Le seul truc c'est quand je fais un clic droit / enregistrer le lien
sous... car ça enregistre le fichier de script php !!!
Ce n'était pas un vrai problème mais plutôt une constatation...

Ce comportement est normal puisque le lien dans le fichier lire.php
n'appelle pas directement le fichier fichier.xls mais le fichier
lire-fichier.php et c'est donc lui qui est enregistrer quand on fait
clic droit / enregistrer sous...
Il est vrai que si quelqu'un a une petite astuce pour éviter cela et
faire comme pour un lien href=fichier.xls je suis preneur... (mais ce
n'est pas grave sinon...)

--
Vincent




1 2