Maison  >  Article  >  développement back-end  >  Comment contrôler l'accès des utilisateurs aux images en php

Comment contrôler l'accès des utilisateurs aux images en php

*文
*文original
2017-12-29 17:55:123959parcourir

Cet article présente principalement comment PHP contrôle l'accès des utilisateurs aux images. Il est principalement utilisé pour empêcher les amis dans le besoin de s'y référer. J'espère que cela aide tout le monde.

Définissez le répertoire des images pour ne pas autoriser l'accès http (supprimez les deux autorisations du répertoire des images : lecture et navigation dans le répertoire).
Utilisez un fichier PHP et utilisez directement la fonction file pour lire l'image. Effectuez le contrôle des autorisations dans ce fichier PHP.
Dans l'environnement Apache, ajoutez simplement le fichier suivant à votre répertoire d'images.

Nom du fichier .htaccess
Le contenu du fichier est le suivant

# options the .htaccess files in directories can override.
# Edit apache/conf/httpd.conf to AllowOverride in .htaccess
# AllowOverride AuthConfig
# Stop the directory list from being shown
Options -Indexes
# Controls who can get stuff from this server.
Order Deny,Allow
Deny from all
Allow from localhost

D'autres environnements Web tels que iss et nginx sont similaires.

class imgdata{
public $imgsrc;
public $imgdata;
public $imgform;
public function getdir($source){
$this->imgsrc = $source;
}
public function img2data(){
$this->_imgfrom($this->imgsrc);
return $this->imgdata=fread(fopen($this->imgsrc,'rb'),filesize($this->imgsrc));
}
public function data2img(){
header(“content-type:$this->imgform”);
echo $this->imgdata;
//echo $this->imgform;
//imagecreatefromstring($this->imgdata);
}
public function _imgfrom($imgsrc){
$info=getimagesize($imgsrc);
//var_dump($info);
return $this->imgform = $info['mime'];
}
}
$n = new imgdata;
$n -> getdir(“1.jpg”); //图片路径,一般存储在数据库里,用户无法获取真实路径,可根据图片ID来获取
$n -> img2data();
$n -> data2img();

Ce code lit l'image puis la transmet directement au navigateur. Avant la lecture et la sortie, les autorisations de l'utilisateur sont jugées.
L'image de lecture PHP mentionnée ici ne fait pas référence au chemin de lecture, mais à la lecture du contenu de l'image, puis saisissez le type d'image via
Header();, tel que gif png jpg, etc., et affichez le contenu de l'image ci-dessous, donc fread()
En fait, lorsque vous voyez image.php?id=100, cette image est affichée sur le navigateur, et lorsque vous visualisez le fichier source, vous ne verrez pas le chemin de l'image, mais le chemin d'accès à l'image. C'est un contenu d'image tronqué.
=============================================
Similaire L'album crypté dans l'espace QQ n'est accessible qu'en saisissant le mot de passe, et l'adresse de la photo dans l'album crypté n'est pas accessible en saisissant directement l'adresse de l'album crypté dans le navigateur. Mon idée actuelle est que l'adresse de l'image est un fichier php et que les autorisations sont vérifiées via php, l'image est lue et sortie. Je me demande s'il existe un moyen plus simple et plus efficace en plus de cette méthode ? Par exemple, générer une adresse de navigation temporaire et utiliser certains plug-ins anti-hotlink de nginx ?
Vous pouvez utiliser ngx_http_auth_basic_module pour accomplir cela.

Modifier le fichier de configuration

location / {
root /usr/local/nginx/html;
auth_basic “Auth”;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
index index.php index.htm;
}


auth_basic Auth dans "Auth" est le titre de la boîte pop-up (entrez le nom d'utilisateur et le mot de passe)
auth_basic_user_file / /usr/local/nginx/conf/htpasswd; dans usr/local/nginx/conf/htpasswd ; est le fichier qui enregistre le mot de passe


PHP interdit le hotlinking des images
1. Supposons que le lien soit autorisé. Le nom de domaine hôte de l'image est : www.test.com
2 Modifier httpd.conf

SetEnvIfNoCase Referer “^http://www.test.com/” local_ref=1
<FilesMatch “.(gif|jpg)”>
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

Cette application simple peut non seulement résoudre le problème. de hotlinking d'images, mais peut également empêcher des fichiers arbitraires avec de légères modifications. Le problème du téléchargement de hotlink.
Lorsque vous utilisez la méthode ci-dessus pour lier des images provenant d'un hôte non spécifié, l'image ne sera pas affichée. Si vous souhaitez afficher une image "lien chaud interdit", nous pouvons utiliser mod_rewrite pour y parvenir.
Tout d'abord, lors de l'installation d'Apache, ajoutez le paramètre –enable-rewrite pour charger le module mod_rewrite.
Supposons que l'image "Hotlinking interdit" soit abc.gif, nous pouvons la configurer dans httpd.conf comme ceci :

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?test.com /.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.test.com/abc.gif [R,L]

Lorsque l'image de l'hôte est hotlinkée, seul abc sera vu. Cette photo "sans hotlinking" !

Recommandations associées :

Exemple de gestion des autorisations d'authentification TP5

Comment implémenter la fonction de gestion des droits en PHP

Comment obtenir simplement le volume de sites Web inclus dans Baidu et Sogou en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn