>백엔드 개발 >PHP 튜토리얼 >PHP에서 이미지에 대한 사용자 액세스를 제어하는 ​​방법

PHP에서 이미지에 대한 사용자 액세스를 제어하는 ​​방법

*文
*文원래의
2017-12-29 17:55:124009검색

이 글에서는 주로 PHP가 이미지에 대한 사용자 액세스를 제어하는 ​​방법을 소개합니다. 주로 필요한 친구가 이를 참조하는 것을 방지하는 데 사용됩니다. 그것이 모두에게 도움이 되기를 바랍니다.

http 액세스를 허용하지 않도록 이미지 디렉터리를 설정합니다(이미지 디렉터리의 두 가지 권한 제거: 읽기 및 디렉터리 탐색).
PHP 파일을 사용하고 파일 기능을 직접 사용하여 이미지를 읽어보세요. 이 PHP 파일에서 권한 제어를 수행합니다.
아파치 환경에서는 이미지 디렉터리에 다음 파일을 추가하면 됩니다.

파일명 .htaccess
파일 내용은 다음과 같습니다

# 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

iss, nginx 등 다른 웹 환경도 비슷합니다.

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();

이 코드는 이미지를 읽어서 브라우저에 직접 출력하는 코드입니다. 읽어서 출력하기 전에 사용자 권한을 판단합니다.
여기에 언급된 PHP 읽기 그림은 읽기 경로를 의미하는 것이 아니라 그림의 내용을 읽은 후
Header();를 통해 그림 유형을 입력하는 것을 의미합니다(예: gif png jpg 등). 아래 그림이 출력되므로 fread()를 사용합니다
사실 image.php?id=100을 보면 이 이미지가 브라우저에 출력되고, 소스파일을 보면 경로가 보이지 않습니다. 이미지는 있지만 왜곡된 이미지 콘텐츠입니다.
=============================================
qq 스페이스와 유사 암호화된 앨범은 비밀번호를 입력해야만 접근할 수 있으며, 암호화된 앨범의 사진 주소를 브라우저에 직접 입력하면 접근할 수 없습니다. 현재 생각으로는 이미지의 주소가 php 파일이고, php를 통해 권한을 확인하고, 이미지를 읽어서 출력하는 것인데, 이 방법 외에 더 간단하고 효율적인 방법이 없을까? 예를 들어, 임시 검색 주소를 생성하고 nginx의 핫링크 방지 플러그인을 사용하시겠습니까?
ngx_http_auth_basic_module을 사용하여 완료할 수 있습니다.

구성 파일 수정

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"의 Auth는 팝업 상자의 제목입니다(사용자 이름과 비밀번호 입력).
auth_basic_user_file /usr/local/nginx/conf/htpasswd; /local/nginx /conf/htpasswd는 비밀번호를 저장하는 파일입니다


PHP는 이미지 핫링크를 금지합니다
1. 이미지 링크가 허용된 호스트 도메인 이름은 www.test.com
2이라고 가정합니다.

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

이 간단한 응용 프로그램은 사진의 핫링크 문제를 해결할 수 있을 뿐만 아니라 약간의 수정만으로 모든 파일의 핫링크 문제를 예방할 수도 있습니다.

위 방법을 사용하여 지정되지 않은 호스트의 사진을 연결하면 사진이 표시되지 않습니다. "핫 링크 금지" 사진을 표시하려면 mod_rewrite를 사용하면 됩니다.
먼저 Apache를 설치할 때 –enable-rewrite 매개변수를 추가하여 mod_rewrite 모듈을 로드합니다.
"핫링크 금지" 사진이 abc.gif라고 가정하면 httpd.conf에서 다음과 같이 구성할 수 있습니다:

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

호스트의 이미지가 도난당하면 abc.gif "핫링크 금지" 사진만 표시됩니다!

관련 권장사항:

TP5 인증 권한 관리 예시

PHP에서 권한 관리 기능을 구현하는 방법

Baidu 및 Sogou 웹사이트를 PHP에 포함시키는 방법

위 내용은 PHP에서 이미지에 대한 사용자 액세스를 제어하는 ​​방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.