>백엔드 개발 >PHP 튜토리얼 >PHP는 이미지에 대한 사용자 액세스를 어떻게 제어합니까? PHP는 이미지 hotlinking_php 팁을 금지합니까?

PHP는 이미지에 대한 사용자 액세스를 어떻게 제어합니까? PHP는 이미지 hotlinking_php 팁을 금지합니까?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 19:55:461202검색

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

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

코드 복사 코드는 다음과 같습니다.

# 디렉토리의 .htaccess 파일이 재정의될 수 있는 옵션.
# .htaccess에서 AllowOverride로 apache/conf/httpd.conf를 편집합니다
# AllowOverride 인증 구성
# 디렉토리 목록 표시를 중지합니다
옵션 -색인
# 이 서버에서 물건을 얻을 수 있는 사람을 제어합니다.
주문거부,허용
모두 거부
로컬호스트에서 허용

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을 사용할 수 있습니다.

구성 파일 수정

코드 복사 코드는 다음과 같습니다.

위치 / {
루트 /usr/local/nginx/html;
auth_basic “인증”;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
인덱스 index.php index.htm;
}


auth_basic "Auth"의 Auth는 팝업 상자의 제목입니다(사용자 이름과 비밀번호 입력)
auth_basic_user_file의 /usr/local/nginx/conf/htpasswd /usr/local/nginx/conf/htpasswd; 비밀번호를 저장하는 파일입니다


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

코드 복사 코드는 다음과 같습니다.

SetEnvIfNoCase 리퍼러 “^http://www.test.com/” local_ref=1
ed6494781dcd7e11185aed5408221d21
주문 허용, 거부
env=local_ref
에서 허용 b7e9bd3ce0eb9864a7850b8051dfc832

이 간단한 응용 프로그램은 사진의 핫링크 문제를 해결할 수 있을 뿐만 아니라 약간의 수정만으로 모든 파일의 핫링크 문제를 방지할 수도 있습니다.
위의 방법을 사용하여 지정되지 않은 호스트의 이미지를 연결하면 이미지가 표시되지 않습니다. "핫 링크 금지" 이미지를 표시하려면 mod_rewrite를 사용하면 됩니다.
먼저 Apache를 설치할 때 –enable-rewrite 매개변수를 추가하여 mod_rewrite 모듈을 로드합니다.
"No Hotlinking" 이미지가 abc.gif라고 가정하면 httpd.conf에서 다음과 같이 구성할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

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

호스트 이미지 도용시 "핫링크 금지"라고 적힌 "abc.gif" 사진만 보이실 거에요!

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