web-dev-qa-db-fra.com

Comment arrêter l'accès d'un fichier PHP depuis d'autres sites

J'ai lu quelque part sur la liaison chaude d'images. Empêcher les liens hypertexte entre images permet d’empêcher le vol de bande passante sur votre site. Cela fonctionnerait-il pour un fichier PHP?

Dans mon cas, j'utilise un fichier PHP pour générer des vignettes à partir d'une image. Je ne veux pas que les autres renvoient ce fichier PHP à partir de leur site.

3
Amit Kumar Gupta

Une méthode de programmation consiste à vérifier le référent pour vous assurer que la demande provient de votre site:

<?php
    $yoursite = "yoursite.com"; //Your site url without http://
    $yoursite2 = "www.yoursite.com"; //Type your domain with www. this time

    $referer = $_SERVER['HTTP_REFERER'];

    //Check if browser sends referrer url or not
    if ($referer == "") { //If not, set referrer as your domain
        $domain = $yoursite;
    } else {
        $domain = parse_url($referer); //If yes, parse referrer
    }

    if($domain['Host'] == $yoursite || $domain['Host'] == $yoursite2) {

        //Run your image generation code

    } else {

        //The referrer is not your site, we redirect to your home page
        header("Location: http://yoursite.com");
        exit(); //Stop running the script

    }    
?> 

Source: http://www.knowledgesutra.com/forums/topic/40295-check-referrer-to-prevent-linking-yours-from-other-sites/

Modifier
Cet article présente une autre méthode utilisant PHP sessions.

5
BenV

cet exemple concerne une image, mais vous pouvez en faire autant pour tous les types de fichiers. Vous pouvez rendre ce dossier inaccessible depuis le Web (par exemple, placez le dossier en dehors de htdocs ou ajoutez des règles .htaccess).

Créez un script PHP qui gère toutes les demandes adressées aux images privées. Ce script devrait faire ce qui suit:

-check si l'utilisateur est authentifié
- vérifier si l'utilisateur est autorisé à voir l'image demandée, ouvrir l'image et l'imprimer sur le navigateur
(vous devez définir des en-têtes http corrects pour vous assurer que le contenu est traité comme une image)

Démo

getimage.php

  if (LoggedInUserCanAccessThisFile())//this is optional user define function as requirement if you want that only login user can see image then with the help of your session variables or cookies you can return this function true or false 
    {
    $file = 'privatedir/image.jpg';
    $type = 'image/jpeg';
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit();
    }

home.php/otherpage.php

<img src="getimage.php" />

(vous pouvez utiliser src = "getimage.php? userid = 123" et entrer dans getimage.php et vérifier si cet utilisateur est connecté ou non pour afficher l'image)

(Vous pouvez aussi utiliser src = "getimage.php? userid = 123 & imgfilename = image3.jpg" pour le code d'images dynamiques et entrer dans getimage.php en tant que

$file = 'privatedir/'.$_GET["imgfilename"];

)

0
Hassan Saeed