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에 따라 라이센스가 부여됩니다.