Tester si un fichier local existe

cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009 - 15 déc. 2008 à 11:07
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009 - 18 déc. 2008 à 09:40
Bonjour à tous,

Dans le cadre d'un site intranet j'aimerais protéger l'accès aux pages de l'intranet en testant si un fichier existe sur un des disques durs locaux du visiteur.

Je m'explique, mon intranet est hébergé en externe sur un serveur dédié.
Lorsque qu'un visiteur tente de visualiser la page d'accueil de mon intranet j'aimerais qu'une fonction teste si un fichier texte existe sur son disque dur (un peu comme un système de cookie) si le fichier existe la page s'ouvre sinon redirection vers une page d'erreur.

Il ya bien la fonction if file existe mais elle ne semble pas fonctionner pour tester si un fichier existe sur un disque dur local.

Existe t'il une solution en php.

Merci pour vos réponses.

11 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 déc. 2008 à 11:27
Salut,

Ce n'est pas possible.

Pourquoi ne pas utiliser, justement, les cookies ? En fait, ce sont des fichiers placés sur le client, mais gérés par lui (question de sécurité quoi...).

Sinon, pour simplement protéger un intranet, pourquoi ne pas utiliser les sessions de PHP (qui utilisent des cookies...) ? Ou alors, une authentification HTTP ?

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009
15 déc. 2008 à 12:45
Merci pour ta réponse.

J'aurrais aimé éviter l'authentification par mot de passe, on à déjà bien assez de login comme cela.

Et pour les cookies, j'aurrais aimé éviter d'installer un cookie sur chaque poste (c'est une gestion), le fait de pourvoir lire un fichier texte sur un des disques durs du réseau m'aurrait permis d'avoir le même fichier pour tout le monde...

Bon si pas possible en php une idée avec un autre language, ajax ou autre ?
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 déc. 2008 à 13:04
Non...

Ajax n'est pas un langage, mais une technologie. Elle permet de charger de manière asynchrone du contenu dynamique dans une page déjà chargée avec Javascript côté client.
Et Javascript n'est pas fait pour lire le contenu du disque dur du client pour l'envoyer au serveur. C'est une question élémentaire de sécurité. Ce n'est donc pas possible, et heureusement !

Voilà... Il faudra trouver autre chose...

Mais en fait, un cookie, ça peut se placer autrement que par le navigateur : c'est jamais qu'un fichier texte qui contient la valeur du cookie, sa date d'expiration, le domaine et le chemin, et dont le nom est le nom du cookie... Il doit pouvoir se créer manuellement... Faut juste le créer correctement, et son emplacement dépend de l'OS et du navigateur utilisé... Mais j'en sais pas plus, ce ne sont d'ailleurs que des suppositions...

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009
15 déc. 2008 à 13:19
Ok je vais creuser la fonction cookie.
A ton avis, je peux héberger ce cookie sur le serveur de la société ou il faut un cookie sur chaque poste ?
0

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

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 déc. 2008 à 13:43
Un cookie se place sur le client... Donc sur chaque poste, obligatoirement.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 déc. 2008 à 18:42
Salut,

J'aurrais aimé éviter l'authentification par mot de passe, on à déjà bien assez de login comme cela.
=> je suis bien d'accord, mais si tu souhaites sécuriser un minimum c'est la seule solution. En plus, tu peux très bien décider que l'utilisateur s'identifie une première fois, et qu'il n'ait plus à le faire pendant 1 an (déconseillé)

Et
pour les cookies, j'aurrais aimé éviter d'installer un cookie sur
chaque poste (c'est une gestion),
=> une gestion ? ton fichier local sans doute, mais certainement pas les cookies.

 le fait de pourvoir lire un fichier
texte sur un des disques durs du réseau m'aurrait permis d'avoir le
même fichier pour tout le monde...
=> le même fichier pour tout le monde ... pas top !! Dans ce cas

Je pense que tu devrais bien préciser tes attentes en matière de sécurité, mais ne lésine pas trop dessus, mieux vaut imposer un login fréquent aux utilisateurs que voir son serveur accessible à tout le monde.
Pour moi seules les sessions te donneront une sécurité facile à mettre en oeuvre.
Après tu peux toujours conserver ta méthode, tout est possible, mais ça sera bien plus lourd à mettre en oeuvre pour un résultat qui ne sera pas meilleur :
  (en PHP)
   - tu installes le strict nécessaire pour que PHP fonctionne (php.exe et 2/3 dll) sur tous les postes
   - tu créé un code qui va lire ton fichier et ouvre (ou non) le navigateur à l'adresse qui va bien, en transmettant le contenu du
   fichier
   - côté serveur tu vérifie que le contenu est correct et tu autorises (ou non) l'accès au site
=> très lourd en terme de gestion, de ressources, de portabilité, etc ...., etc ...

Selon ta config réseau tu peux aussi utiliser les .htaccess en n'autorisant que certaines IP (mais cela suppose que les machines de ton réseau sont attribuées à une seule personne) ou domaines.
Tu pourrais également utiliser le nom d'ouverture de session windows pour autoriser ou non l'accès

Opte pous les sessions

Cordialement,

Kohntark -
0
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009
16 déc. 2008 à 11:58
Merci pour ta réponse.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




En fait je n’ai pas été assez précis dans ma question. Pour l’accès à l’intranet en local, pas de problèmes, nous avons trois sites géographiques différents avec chacun un routeur disposant d’une ip fixe, et en effet j’ai donc protégé l’accès au site intranet via un htaccess sur ces 3 ip et ça fonctionne nickel.



 




Mon problème concerne l’accès à l’intranet depuis l’extérieur, en effet lorsque les employés sont en déplacement (ce qui arrive beaucoup dans notre société) ils disposent d’une connexion vpn qui leur donne accès à certain disque du serveur société. Mon idée initiale était de placer sur un de ces serveurs un fichier texte dont ma page d’accueil intranet irait vérifier la présence ou non. Ainsi si la personne n’est pas dans les locaux ou en vpn pas d’accès à l’intranet. Mais apparemment je ne peux en php ou autre vérifier la présence d’un fichier sur un disque local ou sur un autre serveur web…



 




En ce qui concerne l’installation de php sur tous les postes je ne peu m’y astreindre (il y a plus de 100 postes sur 3 sites différents ).



 




J’ai pensé créer une page de redirection php sur le serveur web interne, celle-ci démarrerais une variable de session puis redirigerais le visiteur vers la page d’accueil de l’intranet, sur cette page si la variable de session n’est pas ouverte, pas d’accès.


Mais je ne pense pas qu’il soit possible d’ouvrir une variable de session sur un serveur et de la récupérer sur un autre (car comme spécifié au départ le site intranet est hébergé sur un serveur dédié externe à la société).



 




Excuses mon entêtement à vouloir éviter les logins mais  nous avons déjà dans notre société de nombreux codes pour toutes les applications et moi même je sature, je voudrais éviter se désagrément aux « nomades » de la boite.



 




Merci.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 déc. 2008 à 21:26
Salut,

Sorry mais j'ai toujours du mal à comprendre :

Mon problème concerne l'accès à l'intranet depuis l'extérieur, en effet
lorsque les employés sont en déplacement (ce qui arrive beaucoup dans
notre société) ils disposent d'une connexion vpn qui leur donne accès à
certain disque du serveur société
=> si ils disposent d'une connexion VPN et accèdent au site intranet hébergé sur un autre server, ce dernier devrait voir la connexion comme étant locale au réseau de ton entreprise, non ? Donc si le site intranet sus cité n'autorise que les connexions venant de tes 3 routeurs, ça devrait suffire (?)

J'ai pensé créer une page de redirection php sur le serveur web
interne, celle-ci démarrerais une variable de session puis redirigerais
le visiteur vers la page d'accueil de l'intranet, sur cette page si la
variable de session n'est pas ouverte, pas d'accès.
=> c'est sans doute une bonne idée (mais pas avec les sessions)
Selon ta config réseau, si l'accès à ce serveur web interne est réellement sécurisé, tu obliges que tout accès au serveur intranet "distant" se fasse via "l'interne" :
    - en n'autorisant, via les htaccess, que les connexions provenant de ce serveur interne
    - + un système de clé passé en GET ou POST pour renforcer la sécurité, voir pour identifier l'utilisateur.
    Du style :
    sur la page de redirection du serveur interne :
          trucmachin = md5 ([MAC de la carte serveur interne].'bbvk0_6a-uih'.date("mid")).'_'.mktime();
          redirection : http://[serveur distant]/index.php?trucmuche=trucmachin
    sur la page du serveur distant :
         tu vérifies que trucmuche est bien égale à ce que tu as défini et que la valeur définie par mktime() n'est pas     
         plus ancienne que mktime() - XXX secondes
Ce n'est qu'une idée, améliorable sans doute, mais qui doit présenter un niveau de sécurité suffisant, sans pour autant utilisé un login supplémentaire ... à ton grand plaisir

Cordialement,

Kohntark -
0
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009
17 déc. 2008 à 16:40
Ok.

C'est à mon tour de na pas comprendre ta première question. Lorsque les nomades se connectent en vpn, leur adresse ip publique est celle que leur attribut leur FAI elle est donc différente pour chacun et bien sur différente de celles des routeurs société ils n’ont donc pas une connexion locale. Provisoirement ils sont obligés de saisir un mot de passe.


En ce qui concerne la variable en md5 c’est intéressant mais une variable get ce n’est pas terrible, il suffit de faire un copier coller de l’adresse contenant la variable et on peux accéder au site.


Je ne pense pas pouvoir envoyer de variable post sans utiliser de formulaire ?



Si on peux se serait en effet une bonne solution.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 déc. 2008 à 20:18
Salut,

Bon, sur ce coup je ne suis pas sur de moi, c'est pour cela que j'employais le conditionnel.
Alors avis aux pros des réseaux, dites moi si je dis une connerie :
(!selon la config du réseau et la façon de mettre en oeuvre le VPN!)
   - un utilisateur se connecte via son FAI en VPN à un site distant
   - il surfe ensuite sur le site Y
Le site Y ne voit il pas l'adresse publique du routeur et non celle de l'utilisateur ??

Si "j'ai bon" la solution que je proposais devrait être viable.
En l'absence de réponse je ferai un test avec mon propre VPN.

En ce qui concerne la variable en md5 c'est
intéressant mais une variable get ce n'est pas terrible, il suffit de
faire un copier coller de l'adresse contenant la variable et on peux
accéder au site.

=> POST n'est pas mieux une fois que tu as choppé les headers tu peux faire la même chose qu'en GET (et puis repense à ton idée de la lecture d'un fichier, c'est la même chose, il n'y a pas 36 façons de passer des données à un serveur WEB)
Mon exemple de "trucmachin" n'était ... qu'un exemple pour lequel je me suis par ailleurs planté; j'aurai dû mettre l'intégralité de la ligne en md5.
Tu peux aisément corser la chose, par exemple (mais là aussi c'est améliorable) :
$a = (mktime() - (mktime() + 3 * date("j")) - 1853).[le nom de ton chien]_o0hh .... inutile d'aller plus loin, le premier exemple était déjà introuvable, le problème, comme tu le dis, est la possibilité d'intercepter la trame envoyée, encore faut il garder à l'esprit que cette trame n'est valable que quelques secondes, et qu'elle est donc dynamique dans le temps.
Après il faut pondérer le risque d'attaque :
     - ton site est top confidentiel => tu mets en place ce qu'il faut : SSL, authentification par mot de passe, adresse MAC, filtrages divers, firewall, etc ... etc ...
     - ton site n'est pas ultra confidentiel, le fait qu'une personne n'appartenant pas à l'entreprise puisse le visualiser ne porte pas atteinte à l'intégrité de cette dernière.
> a mon humble petit avis il ne faut pas oublier que, si tu es dans ce cas, le pirate potentiel ne se prendra pas bien longtemps la tête et ira voir ailleurs. Parce que qu'un "deface" de site ne mérite pas d'y passer 3 heures (pour google.fr ok, pour le site intranet de ta société de quelques centaines de personnes certainement pas), il y en a des tonnes sur lesquels ont peut faire ce que l'on veut; un clône dans le but de passer des attaques > même tarif, il y a des millions de machines non protégées qui sont tout aussi efficaces que ton serveur, etc ....

Il y a une multitude de possibilité, dans un cas comme dans l'autre !!
Je reste sur mes sessions qui sont un bon compromis entre sécurité et facilité de mise en oeuvre

Au plaisir,

Kohntark -
0
cs_converse Messages postés 46 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 14 mai 2009
18 déc. 2008 à 09:40
Oui tu as raison pour la sécurité, ce n'est pas le site de la CIA.

En revanche pour le vpn j'ai fait des test en me connectant de l'extérieur et l'ip de mon poste est bien celle du routeur local (de l'endroit ou je me connecte, chez moi par exemple) et non celle du routeur de la société c'est donc indégrable par les ip.

Je vais faire des tests avec les variables comme tu le dis, en fait je pensait aussi à mettre sur le serveur local une page de redirection avec un formulaire automatique avec cela dans le body :

<FORM id="my_form" method="post" action="ma_page_accueil_externe.php">

Avec un champs caché dans ce formulaire contenant une varible post, ma page d'accueil externe ouvrirait ensuite une variable de session si elle à bien recu les infos du formulaire.

Comme la page de redirection locale n'est accessible que dans les locaux et en vpn c'est peux-être une solution non ?

Merci pour ton aide je pense que cette fois-ci ca devrait suffire.
0
Rejoignez-nous