PHP 구현 이미지 도 난 방지 체인 해체 작업 예제[이미지 도 난 방지 체인 문제 해결/역방향 대리]
5688 단어 PHP그림 도 난 방지 체인
많은 동료 들 의 블 로그,사 이 트 는 모두 도상 으로 이 루어 진다.그러면 현재 많은 안정 적 인 도상 인 터 페 이 스 는 모두 도 난 방지 체인 으로 처리 되 었 다.예 를 들 어 바 이 두,알 리,경 동,샤 오미,개 수색 등 이다.
그래서 우 리 는 어떻게 도 난 방지 체인 을 피하 고 그림 을 직접 사용 해 야 합 니까?
1 도 난 방지 의 원 리 는 무엇 입 니까?
클 라 이언 트(브 라 우 저)가 서버 에 요청 한 내용 이 있 을 때 header 를 제출 합 니 다.이 header 에는 브 라 우 저 정보,쿠키 등 내용 이 포함 되 어 있 습 니 다.그러면 referer 라 는 동쪽 도 여기에 포함 되 어 있 습 니 다.
레 퍼 는 뭐 하 는 거 예요?
이것 은 서버 에 이 요청 의 출처 가 누구 인지 알려 주 는 것 입 니 다.예 를 들 어 페이지 A 에서 페이지 B 로 넘 어가 면 페이지 B 가 받 은 referer 는 페이지 A 입 니 다.
그러나 그림 에 있어 서 는 이것 과 조금 다 릅 니 다.그림 은 html 페이지 로 딩 이 끝 난 후에 불 러 옵 니 다.그래서 그림 이 받 은 referer 는 웹 페이지 의 이전 페이지 가 아니 라 현재 페이지 입 니 다.
이렇게 많아
그렇다면 현재 많은 사 이 트 는 어떻게 referer 를 이용 하여 이미지 도 난 을 방지 합 니까?
세 가지 경우 그림 참조 허용:
본 사이트referer 정보 가 없 는 경우.서버 는 브 라 우 저 에서 직접 방문 한 그림 URL 이 라 고 생각 하기 때문에 이 경우 정상적으로 접근 할 수 있 습 니 다)화이트 리스트 사이트 주소도 난 방지 체인 처 리 를 시작 하 다.
1.서버 가 필요 합 니 다.
2.코드 사용 php
<?php
class ImgBridge{
private $water='';
private $imgUrl='';
private $referer='';
private $ua='MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1';
private $imgCode='';
private $imgHeader='';
private $imgBody='';
private $imgType='';
public function \_\_construct($config=array()){
foreach($config as $key=>$value){
$this->$key=$value;
}
}
public function getImg($imgUrl){
$this->imgUrl=$imgUrl;
/\*\* url \*/
if(substr($this->imgUrl,0,7)!=='http://' && substr($this->imgUrl,0,8)!=='https://'){
$this->imgUrl='http://'.$this->imgUrl;
}
/\*\* url host \*/
$url\_array=parse\_url($this->imgUrl);
/\*\* referer \*/
$this->referer=$this->referer==""?'http://'.$url\_array\['host'\]:$this->referer;
/\*\* \*/
$this->urlOpen();
$this->imgBody;
/\*\* \*/
if($this->imgCode!=200){
$this->error(1);
exit();
}
/\*\* \*/
preg\_match("/Content-Type: image\\/(.+?)\
/sim",$this->imgHeader,$result);
/\*\* \*/
if(!isset($result\[1\])){
$this->error(2);
exit();
}else{
$this->imgType=$result\[1\];
}
/\*\* \*/
$this->out();
}
private function out(){
/\*\* gif , \*/
if($this->imgType=='gif'){
header("Content-Type: image/gif");
echo $this->imgBody;
exit();
}
header("Content-Type: image/png");
/\*\* , \*/
$im=imagecreatefromstring($this->imgBody);
$white = imagecolorallocate($im, 255, 255, 255);
/\* \*/
if($this->water){
imagettftext($im, 12, 0, 20, 20, $white, "/fonts/hwxh.ttf", $this->water);
}
imagepng($im);
}
private function error($err){
header("Content-Type: image/jpeg");
$im=imagecreatefromstring(file\_get\_contents('./default.jpg'));
imagejpeg($im);
}
private function urlOpen()
{
$ch = curl\_init();
curl\_setopt($ch, CURLOPT\_URL, $this->imgUrl);
curl\_setopt($ch, CURLOPT\_USERAGENT, $this->ua);
curl\_setopt ($ch,CURLOPT\_REFERER,$this->referer);
curl\_setopt($ch, CURLOPT\_RETURNTRANSFER, 1);
curl\_setopt($ch, CURLOPT\_HEADER, 1);
/\*\* \*/
curl\_setopt($ch, CURLOPT\_FOLLOWLOCATION, true);
/\*\* https \*/
$opt\[CURLOPT\_SSL\_VERIFYHOST\] = 2;
$opt\[CURLOPT\_SSL\_VERIFYPEER\] = FALSE;
curl\_setopt\_array($ch, $opt);
$response = curl\_exec($ch);
$this->imgCode=curl\_getinfo($ch, CURLINFO\_HTTP\_CODE) ;
if ($this->imgCode == '200') {
$headerSize = curl\_getinfo($ch, CURLINFO\_HEADER\_SIZE);
$this->imgHeader = substr($response, 0, $headerSize);
$this->imgBody = substr($response, $headerSize);
return ;
}
curl\_close($ch);
}
}
$img=new ImgBridge(array('water'=>''));
$img->getImg(strstr($\_SERVER\["QUERY\_STRING"\], "http"));
코드 이름 은 dl.php 입 니 다.그러면 바로 방문 하 실 수 있 습 니 다.
http://도 메 인 이름/dl.php?url=도 난 방지 체인 이미지 주소
다음은 제 가 배치 한 역방향 대리 입 니 다.
http://www.likeyunba.com/2.php?url=
제 것 을 직접 쓰 지 마 세 요.제 것 은 오래 두 지 않 을 것 입 니 다.1-2 개 월 만 남 겨 두 고 체험 해 드 리 겠 습 니 다.
케이스
나 는 135 편집기 로 그림 을 한 장 올 려 그림 주 소 를 얻 었 다.
https://image.135editor.com/files/users/740/7407329/201912/zTeFAx8R_Cmea.jpg
역방향 대 리 를 더 해 도 난 방지 체인 처 리 를 해제 하 다.
http://www.likeyunba.com/2.php?url=https://image.135editor.com/files/users/740/7407329/201912/zTeFAx8R_Cmea.jpg
HTML 형식
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.