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

10 réponses

1 2
Avatar
Legeais Vincent
[...]
X-post : fr.comp.lang.php & alt.fr.comp.lang.php
fu2 : fr.comp.lang.php


Je crois que j'ai oublié de faire le X-post... !!!
Tant pis pour moi...

--
Vincent

Avatar
Thief13
Tu met tes fichier et tes images dans un répertoir avec htaccess deny
from all, et tu les récupère avec un fichier php qui controle les droit
et qui les réinjecte avec le bon mimi-type.

Je fait comme ça, et c'est super efficace !
Avatar
Legeais Vincent
Tu met tes fichier et tes images dans un répertoir avec htaccess deny
from all, et tu les récupère avec un fichier php qui controle les droit
et qui les réinjecte avec le bon mimi-type.


Pour cela je pense adapter un script que j'utilise pour faire les
miniatures, ce qui donnerait cela :

appel : <img src='image.php?photo=photo.jpg'>
script image.php :
<?
header("content-type:image-jpeg");
$source = $photo;
$image = imageCreateFromJpeg($source);
imageJpeg($image);
imageDestroy($image);
?>

Je fait comme ça, et c'est super efficace !


Est-ce comme cela que toi tu fais ?
Si tu fais autrement, je veux bien savoir comment...

Par contre ceci ne fonctionne qu'avec les images...
Comment faire pour les sont et les vidéos ?
Et aussi pour les autres fichiers (.css) ?
Et pour un fichier .pdf par exemple ?

Merci

--
Vincent

Avatar
P'tit Marcel
ceci ne fonctionne qu'avec les images...
Comment faire pour les sont et les vidéos ?
Et aussi pour les autres fichiers (.css) ?
Et pour un fichier .pdf par exemple ?


tous ces objets inclus en HTML peuvent être stockés dans un/des
répertoires accessibles du web. En général ce sont des objets placés par
le webmaster qui s'assure qu'ils ne sont pas dangereux.

Pour les objets inclus qui ont été uploadés par un autre utilisateur
(donc pas des css, du js ou du php), tu peux vérifier :
- leur type mime (http://faqfclphp.free.fr/#rub4.10)
cela évite les erreurs mais pas les tentatives malfaisantes
- les premiers caractères du fichier (voir le fil "Controler le type de
fichier envoye par un formulaire" en cours sur ce forum)
- leur suffixe (refuser .php? .js .java etc.)

eça
--
P'tit Marcel

Avatar
Legeais Vincent
tous ces objets inclus en HTML peuvent être stockés dans un/des
répertoires accessibles du web. En général ce sont des objets placés par
le webmaster qui s'assure qu'ils ne sont pas dangereux.

Pour les objets inclus qui ont été uploadés par un autre utilisateur
[...]


Mon problème n'est pas la dangerosité des fichiers.
Je souhaite juste que personne de non identifié ne puissent y accéder en
tapant l'adresse directement (donc pas dans un répertoire accessible du
web).
Je souhaite que le fichier pdf ou xls que j'ai mis moi-même mais qui
contient des données confidentielles ne soient accessible uniquement si
la personne s'est bien identifiée au début...

Comment faire ?

Merci

--
Vincent

Avatar
P'tit Marcel
tous ces objets inclus en HTML peuvent être stockés dans un/des
répertoires accessibles du web. En général ce sont des objets placés
par le webmaster qui s'assure qu'ils ne sont pas dangereux.

Pour les objets inclus qui ont été uploadés par un autre utilisateur
[...]


Mon problème n'est pas la dangerosité des fichiers.
Je souhaite juste que personne de non identifié ne puissent y accéder en
tapant l'adresse directement (donc pas dans un répertoire accessible du
web). Je souhaite que le fichier pdf ou xls que j'ai mis moi-même mais qui
contient des données confidentielles ne soient accessible uniquement si
la personne s'est bien identifiée au début...


ça me paraît pas insurmontable.
dans les pages HTML, tu peux mettre des liens genre :
<a href='http://.../objet.php?fichier=classeur.xls'>

et le script objet.php est du genre :

if(utilisateur_authentifie()) {
$fichier = @$_GET['fichier'];
if(!preg_match('`[/]`', $fichier) and ($fichier{0} != '.')) {
$fichier_complet = CHEMIN_INCLUS . '/'. $fichier;
if(file_exists($fichier_complet)) {
header('Content-Type: application/octet-stream');
header("Content-Length: ".filesize($fichier_complet));
set_time_limit(0);
if(@readfile($fichier_complet))
exit();
}
else die("erreur à la lecture du fichier $fichier");
}
else die("fichier $fichier non trouvé");
}
else die("fichier $fichier non valide");
}
else {
header('HTTP/1.1 403 Forbidden');
die("accès refusé");
}


Il faudrait aussi positionner le type mime par un autre header(). Pour
récupérer ce type, tu peux programmer une fonction comme le fonction
mimeTypes proposée par Philipp Heckel dans les notes du manuel ici:
http://fr.php.net/readfile


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/


Avatar
Thief13
appel : <img src='image.php?photo=photo.jpg'>
script image.php :
<?
header("content-type:image-jpeg");
$source = $photo;
$image = imageCreateFromJpeg($source);
imageJpeg($image);
imageDestroy($image);
?>


Est-ce comme cela que toi tu fais ?
Si tu fais autrement, je veux bien savoir comment...



C'est le principe

Par contre ceci ne fonctionne qu'avec les images...
Comment faire pour les sont et les vidéos ?
Et aussi pour les autres fichiers (.css) ?
Et pour un fichier .pdf par exemple ?

Merci


Ca marche avec tout les fichiers : tu met le mime type que tu veux dans
le header

Avatar
Thief13
Pour les objets inclus qui ont été uploadés par un autre utilisateur
(donc pas des css, du js ou du php), tu peux vérifier :
- leur type mime (http://faqfclphp.free.fr/#rub4.10)
cela évite les erreurs mais pas les tentatives malfaisantes
- les premiers caractères du fichier (voir le fil "Controler le type de
fichier envoye par un formulaire" en cours sur ce forum)
- leur suffixe (refuser .php? .js .java etc.)


Controler le mime et le suffixe, ça fait un peut double emplois, car le
mime est déterminé par le suffixe. et c'estplus prise de tete de
controler le suffixe (tous n'ont pas la meme taille, un meme fichier
peut avoir plusieurs suffixe -.jpg et .jpeg par exemple- etc etc)

Perso, grace au fil "Controler le type de fichier envoye par un
formulaire", maintentant, je commence par vérifier que le mime est un
des type accepté, puis je compare le mime à la signature qu'il est sensé
avoir.

Mais là, je pense que le probleme est différent : il veux empecher
l'acces au fichiers qui sont sur le serveur aux personnes non enregistré
il me semble.

Avatar
Legeais Vincent
dans les pages HTML, tu peux mettre des liens genre :
<a href='http://.../objet.php?fichier=classeur.xls'>

et le script objet.php est du genre :

if(utilisateur_authentifie()) {
[...]


Ca me parait bien.
Je vais donc tester cela tranquillement.
Merci

--
Vincent

Avatar
Legeais Vincent
appel : <img src='image.php?photo=photo.jpg'>
script image.php :
<?
header("content-type:image-jpeg");
$source = $photo;
$image = imageCreateFromJpeg($source);
imageJpeg($image);
imageDestroy($image);
?>

[...]


C'est le principe

[...]


Ca marche avec tout les fichiers : tu met le mime type que tu veux dans
le header


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 ?

--
Vincent


1 2