Рубрики
Uncategorized

Пример реализации PHP операции взлома противоугонной цепи изображения [решить проблему противоугонной цепи изображения / обратного агента]

Автор оригинала: David Wong.

В этой статье описывается PHP-реализация операции взлома цепочки защиты от кражи изображений. Для вашей справки приведем следующие сведения:

Многие блоги и сайты друзей реализованы с помощью picture bed. Сколько стабильных интерфейсов map bed было обработано с помощью противоугонной цепи, такой как Baidu, Ali, Jingdong, Xiaomi, Sogou и т.д.

Итак, как мы можем избежать противоугонной цепочки и использовать изображения напрямую?

В чем заключается принцип защиты от кражи?

Когда клиент (браузер) запрашивает содержимое с сервера, он отправляет заголовок Этот заголовок содержит такое содержимое, как информация о браузере, файлы cookie и т. Д. Референт Это также входит в это.

Для чего нужен референт?

Он сообщает серверу, кто является источником запроса. Например, если вы перейдете со страницы a на страницу B, то ссылка, полученная на странице B, будет страницей a.

Однако изображение немного отличается от этого. Изображение загружается после загрузки HTML-страницы, поэтому ссылка, полученная изображением, является не предыдущей страницей веб-страницы, а текущей страницей.

Однако изображение немного отличается от этого. Изображение загружается после загрузки HTML-страницы, поэтому ссылка, полученная изображением, является не предыдущей страницей веб-страницы, а текущей страницей.

Итак, как теперь использовать многие веб-сайты , на которые ссылаются , Чтобы предотвратить изображение цепочки?

Есть три случая, в которых изображения могут быть процитированы:

  1. Этот веб-сайт.
  2. Никакой информации о рекомендателе. В этом случае вы можете получить доступ к изображению непосредственно с сервера
  3. Адрес в Белом списке.

Начните обрабатывать противоугонную цепочку

1. Вам нужен сервер 2. В коде используется php

$value){
      $this->$key=$value;
    }
  }
  
  public function getImg($imgUrl){
    $this->imgUrl=$imgUrl;
    /\*\*Processing URL\*/
    if(substr($this->imgUrl,0,7)!=='http://' && substr($this->imgUrl,0,8)!=='https://'){
      $this->imgUrl='http://'.$this->imgUrl;
    }
    /\*\*Resolving the host in the URL\*/
    $url\_array=parse\_url($this->imgUrl);
    /\*\*Set referer\*/
    $this->referer=$this->referer==""?'http://'.$url\_array\['host'\]:$this->referer;
    /\*\*Start getting\*/
    $this->urlOpen();
    $this->imgBody;
    /\*\*Processing error\*/
    if($this->imgCode!=200){
      $this->error(1);
      exit();
    }
    
    /\*\*Get image format\*/
    preg\_match("/Content-Type: image\/(.+?)\n/sim",$this->imgHeader,$result);
    /\*\*See if it's a picture\*/
    if(!isset($result\[1\])){
      $this->error(2);
      exit();
    }else{
      $this->imgType=$result\[1\];
    }
    /\*\*Output content\*/
    $this->out();    
  }
  private function out(){
    /\*\*Gif does not deal with, directly draw the graph\*/
    if($this->imgType=='gif'){
      header("Content-Type: image/gif");
      echo $this->imgBody;
      exit();
    }
    header("Content-Type: image/png");
    /\*\*Other types, with watermark\*/
    $im=imagecreatefromstring($this->imgBody);
    $white = imagecolorallocate($im, 255, 255, 255);
    /\*Add watermark\*/
    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);
    /\*\*Jump, too\*/
    curl\_setopt($ch, CURLOPT\_FOLLOWLOCATION, true);
    /\*\*Support for 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://доменное имя/адрес с изображением цепочки

Вот обратный прокси-сервер, который я развернул

http://www.likeyunba.com/2.php?url =

Пожалуйста, не принимайте мое прямое использование, мое не будет оставлено надолго, только храните его в течение короткого периода 1-2 месяцев, чтобы вы могли испытать.

дело

Я использую редактор 135 для загрузки изображения и получения адреса изображения

Я использую редактор 135 для загрузки изображения и получения адреса изображения

Плюс обратный агент, обработка цепочки защиты от взлома

Плюс обратный агент, обработка цепочки защиты от взлома

Формат HTML

src=”http://www.likeyunba.com/2.php?url=https://imgs.developpaper.com/imgs/zTeFAx8R_Cmea.jpg” ширина=”500″/> src=”http://www.likeyunba.com/2.php?url=https://imgs.developpaper.com/imgs/zTeFAx8R_Cmea.jpg” ширина=”500″/>

Более заинтересованные читатели, интересующиеся контентом, связанным с PHP, могут просмотреть специальные разделы этого веб-сайта: “Краткое изложение навыков работы с графикой и изображениями PHP”, “Навыки работы с массивом PHP (массив)”, “Учебник по структуре данных и алгоритмам PHP”, “Краткое изложение алгоритмов программирования PHP”, “Краткое изложение навыков математических операций PHP”, “Краткое изложение использования строк PHP (строк)” и “Краткое изложение навыков работы с общими базами данных PHP” “

Я надеюсь, что эта статья поможет вам в программировании на PHP.