IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Appelant dans page appelée


Sujet :

Langage PHP

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut Appelant dans page appelée
    Bonjour,

    Juste une petite question pour le week end...

    j'ai une page "appelée" et une page "appelante"

    dans l'appelante je fais un include de la page appelée

    Je souhaiterais dans le page appelé (includée) faire un test pour savoir si la page appelante est une page locale du domaine ou une page extérieure

    j'ai tenté avec referrer mais la page appelée me retourne le referrer de la page appelante et non la page appelante si j'affiche la page appelante, ou le referrer direct si je tente d'afficher la page appelée directement sans l'intermédiaire de l'appelante...


    Je sais pas si c'est très clair
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Par défaut
    Salut,
    avec la variable $_SERVER ca doit être possible je pense

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Peut etre ... mais quoi dans $_SERVER ?

    pour ce qui est du referrer je l'ecarte d'office, j'ai decouvert que ce n'était pas fiable on peut le modifier dasn les headers envoyés ...

    Je pensais aussi à tester un délai d'appel au moyen d'une variable de session entre la page appelante et la page appelée
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Par défaut
    avec $_SERVER["REQUEST_URI"]
    ou $_SERVER["SCRIPT_NAME"]

    edit: si c'est pour protéger, tu peut toujours créer un fichier .htaccess limitant les droits d'accès au fichier en question

  5. #5
    jnore
    Invité(e)
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Je souhaiterais dans le page appelé (includée) faire un test pour savoir si la page appelante est une page locale du domaine ou une page extérieure
    Bonsoir,

    Si je comprends bien ton objectif, pourquoi ne pas tester dans la page appelée une variable présente dans la page appelante ?
    Un Isset sur une variable que toi seul connait, voire en plus un contôle de la valeur, dans ce cas feraient l'affaire !



    Si toutefois c'est bien ce que tu veux!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Merci de vos participations.

    Pour le htaccess oui pas de souci je cherche juste à réaliser une alternative.
    Parfois certains modules ne sont pas activés chez l'hebergeur et on n'a pas forcément accès au config ...

    je vais tenter avec $_SERVER["REQUEST_URI"] et $_SERVER["SCRIPT_NAME"]

    Oui il s'agit en effet d'une forme de protection

    mais la page appelante génère la variable de session et qu'elle est récupérée par la page appelée il suffit de lancer la page appelante seule.
    Je pensais plutot tester un délai entre la creation de la variable et son test sur la page appelée, je ne pense pas que l'on puisse battre de vitesse un appel local ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Je souhaiterais dans le page appelé (includée) faire un test pour savoir si la page appelante est une page locale du domaine ou une page extérieure
    qu'est ce que tu appelles "page extérieure" ?
    il peut y avoir plusieurs noms de domaine qui accèdent aux mêmes fichiers PHP ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    appel local = appel par une page du domaine
    appel extérieur = appel par une page qui ne fait pas partie du domaine
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    tu parles de quel domaine ? les fichiers qui sont sur ton serveur ?
    il y a une différence entre l'inclusion de fichiers qui sont sûr le même serveur physique et l'inclusion à partir d'un autre serveur qui passe par HTTP dans ce cas

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    les fichiers sont sur le même serveur, ma problématique de base est de pouvoir distinguer en utilisant include ou require ou header location ou tout autrre moyen d'appel de page, si l'appel est fait par une page du domaine ou depuis un remote adress externe
    l'appel doit être fait par le serveur et non par une page distante, seul un script du serveur doit pouvoir appeler la page.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Tu peux tester avec la fonction get_included_files() dans la page appelée. Si c'est un count de cette fonction est égal à 1 dans la page appelée, c'est qu'elle n'a pas été incluse et qu'elle a été appelée directement dans le navigateur.

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    l'appel doit être fait par le serveur et non par une page distante, seul un script du serveur doit pouvoir appeler la page.
    dans ce cas le plus simple est de mettre ce fichier dans un répertoire qui n'est pas accessible par le serveur HTTP, comme ça tu n'as même pas besoin de faire de test à l'intérieur de la page

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    je n'ai pas saisi l'astuce...
    le count de get_included_file me retourne 1 dasn tous les cas


    [Edit]
    Bon je m'en suis sorti avec get_included_file, mais il a fallu que je passe par une page supplémentaire qui fait l'include de la page
    Cette methode n'est pas à 100% sure et ne fonctionne comme protection que si le nom du second fichier reste inconnu de sorte que personne ne fasse un script en en faisiant un include.

    Si quelqu'un connait une instruction / fonction php capable de déterminer si le fichier est appelé par un script du serveur, je suis preneur !
    [\edit]
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    je ne sais pas si j'ai très bien saisi. Tu souhaites simplement vérifier que la page appelée n'est pas appelée par n'importe qui et dans n'importe quel contexte ?

    Pour ma part j'utilise une technique toute simple qui consiste à vérifier qu'une constante a bien été créée par la page appelante.

    Soit une page1.php qui est la page "appelante" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define('IS_LOCAL', true);
    include_once('page2.php');
    Soit une page2.php qui est la page "appelée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(!defined('IS_LOCAL')){
        exit();
    }
     
    // page 2 code

  15. #15
    jnore
    Invité(e)
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    je ne sais pas si j'ai très bien saisi. Tu souhaites simplement vérifier que la page appelée n'est pas appelée par n'importe qui et dans n'importe quel contexte ?

    Pour ma part j'utilise une technique toute simple qui consiste à vérifier qu'une constante a bien été créée par la page appelante.

    Soit une page1.php qui est la page "appelante" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define('IS_LOCAL', true);
    include_once('page2.php');
    Soit une page2.php qui est la page "appelée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(!defined('IS_LOCAL')){
        exit();
    }
     
    // page 2 code
    A quelque chose près, cela correspond à ma propo précédente.
    Mais peut-être, veut-il saisir en bdd l'adresse de la page appelante !

  16. #16
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Bonsoir,

    Personnellement j'aurais fait la même chose que ThomasR, c'est la technique utilisée par EllisLab dans leur framework CodeIgniter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    Maintenant c'est surtout utile pour éviter un appel direct du fichier. Par contre côté sécurité je ne vois pas bien où tu veux en venir ?

    Pour réaliser un appel à un fichier distant, soit tu passes par FTP ou bien par HTTP, dans le premier cas il te faut avoir les accès client, dans le second ton fichier PHP est interprété avant d'être renvoyé au client. Donc dans les deux cas c'est sécurisé. C'est ce que mathieu à sous-entendu dans son post.

    Et comme l'a dit ThomasR si tu veux éviter les appels directs tu définis une constante qui l'empêche. Autre possibilité, tu places ton/tes fichiers en dehors du répertoire de ton site ailleurs sur ton serveur de manière à ne pouvoir les appeler qu'en interne (suggéré par mathieu).

    Dernière solution, et celle-là c'est Stef22640 qui l'a soulevée, il suffit d'utiliser un fichier .htaccess.

    Bon courage à toi SpaceFrog

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Merci de toutes ces précisions
    Je sécurise mes fichiers avec htaccess, je cherchais juste une alternative php pour empecher un accès direct.

    Le souci est que quoi que je fasse, y compris mettre un fichier en amont, il faut bien que la page html fasse appel aux src d'image par un ficher php accessible depuis l'extérieur.
    Le fichier image par lui même n'est pas accessible, mais il suffit dy' acceder par l'intermédiaire du fichier php mis dans le src...
    Je tourne donc en rond

    Mon but étant de n'authoriser l'affichage des images ou (accès aux fichiers ) que par un appel interne, c'est a dire en gros émuler le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    deny from all
    allow from localhost
    et pouvoir éventuellement retourner une autre image (ou fichier) si l'appel n'est pas local.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Le souci est que quoi que je fasse, y compris mettre un fichier en amont, il faut bien que la page html fasse appel aux src d'image par un ficher php accessible depuis l'extérieur.
    Le fichier image par lui même n'est pas accessible, mais il suffit dy' acceder par l'intermédiaire du fichier php mis dans le src...
    dans ce cas il n'y pas d'appel "interne". dans tous les cas il y a une requête HTTP

    donc si tu veux limiter l'accès aux images à certaines personnes, tu dois par exemple passer par une identification qui utilisent des sessions

  19. #19
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    je ne sais pas si j'ai très bien saisi. Tu souhaites simplement vérifier que la page appelée n'est pas appelée par n'importe qui et dans n'importe quel contexte ?

    Pour ma part j'utilise une technique toute simple qui consiste à vérifier qu'une constante a bien été créée par la page appelante.

    Soit une page1.php qui est la page "appelante" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define('IS_LOCAL', true);
    include_once('page2.php');
    Soit une page2.php qui est la page "appelée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(!defined('IS_LOCAL')){
        exit();
    }
     
    // page 2 code
    Bonsoir,

    Avec cette méthode, il suffit que quelqu'un crée une constante IS_LOCAL et le tour est déjoué, moi j'opterais pour créer un token (ID) dans la page appelante et que je transmet par POST a ma seconde page et je vérifie la similitude.

  20. #20
    jnore
    Invité(e)
    Par défaut
    Citation Envoyé par aityahia Voir le message
    Bonsoir,

    Avec cette méthode, il suffit que quelqu'un crée une constante IS_LOCAL et le tour est déjoué, .
    Je ne comprends pas! Comment la page appelante peut-elle savoir que la page appelée s'attend à tester une constante?
    Qui plus est, si on lui met une valeur complexe, que seule la page appelée connait, il n'y a pas de risque!

Discussions similaires

  1. accès de jquery dans l'appel des pages iframe
    Par speedylol dans le forum jQuery
    Réponses: 4
    Dernier message: 03/12/2012, 08h55
  2. javascript dans page appelée par shadowbox
    Par kaking dans le forum jQuery
    Réponses: 2
    Dernier message: 13/02/2012, 08h17
  3. Appel Méthode page appelant
    Par jacky01 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/11/2009, 16h06
  4. appel de javascript impossible dans page appelée en ajax
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/08/2007, 10h48
  5. Comment creer un ocx pour appel dans page html
    Par minette dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 19/07/2006, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo