Alex_vcorp писал(а):Мало информации, лучше сделать простую тестовую веб-страницу, которая иллюстрирует проблему, и привести её код здесь.
Вот сделал тестовую страницу, итак, начальные данные:
Тестовая страница с двумя картинками по адресу 
http://wellsit.ru/index.html1. Создаем проект
2. В каталоге проекта создаем файлик local.html и закидываем туда такое:
- Код: Выделить всё
- <HTML>
 <body>
 <center>
 <img src="http://wellsit.ru/images/1.jpg"><br /><br />
 <img src="http://wellsit.ru/img/2.jpg">
 </center>
 </body>
 </HTML>
 
3. Кидаем на форму компонент хрома и три кнопки Button1 - Открыть сайт, Button2 - Открыть локальную страницу, Button3 - Загрузить изображение
для Button1 пишем:
- Код: Выделить всё
- procedure TForm1.Button1Click(Sender: TObject);
 begin
 Chromium1.Load('http://wellsit.ru/index.html');
 end;
 
Для Button2 пишем:
- Код: Выделить всё
- procedure TForm1.Button2Click(Sender: TObject);
 begin
 Chromium1.Load('file:///local.html');
 end;
 
Для Button3 пишем:
- Код: Выделить всё
- procedure TForm1.Button3Click(Sender: TObject);
 var
 HTTP:THTTPSend;
 begin
 HTTP:=THTTPSend.Create;
 if HTTP.HTTPMethod('GET','http://wellsit.ru/images/1.jpg') then begin
 showmessage(IntToStr(HTTP.ResultCode));
 HTTP.Document.SaveToFile('1.jpg');
 end;
 HTTP.Clear;
 if HTTP.HTTPMethod('GET','http://wellsit.ru/img/2.jpg') then begin
 showmessage(IntToStr(HTTP.ResultCode));
 HTTP.Document.SaveToFile('2.jpg')
 end;
 HTTP.Free;
 end;
 
На сервере (ngin+php-fpm):
- Код: Выделить всё
-         location ^~ /img/ {
 valid_referers server_names ~(wellsit|yandex|google); //для примера разрешен доступ в этот каталог только этим реферерам
 if ($invalid_referer){
 return 403;
 }
 }
 
Тестируем:
Запускаем софтину жмем "Открыть сайт" - видим две картинки. Если нажать на "Открыть локальную страницу" то тоже будет 2 картинки - ибо они в кэше, лениво бло возится с очисткой, поэтому закрываем софтину - открываем заново, жмем "Открыть локальную страницу" - видим одну картинку, ко второй доступа нет. 
Пробуем загрузить картинки - жмем "Загрузить изображения" в первом случае получаем код 200  - все нормально, вторая картинка возвращает 403 - доступ запрещен.
Вот примерно такое происходит на некторых сайтах - то есть запрещают хотлинки. В моем случае это можно обойти, подделав рефера. А есть еще способы обхода? Ведь можно запретить доступ к картинкам и так:
- Код: Выделить всё
- locale ^ ~ /img/ {
 allow IP_адрес_сервера;
 deny all;
 }
 
Есть мысли?
Весь код тестового проекта:
- Код: Выделить всё
- unit Unit1;
 
 {$mode objfpc}{$H+}
 
 interface
 
 uses
 Classes, SysUtils, FileUtil, cef3lcl, Forms, Controls, Graphics, Dialogs,
 StdCtrls, httpsend;
 
 type
 
 { TForm1 }
 
 TForm1 = class(TForm)
 Button1: TButton;
 Button2: TButton;
 Button3: TButton;
 Chromium1: TChromium;
 procedure Button1Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);
 procedure Button3Click(Sender: TObject);
 private
 { private declarations }
 public
 { public declarations }
 end;
 
 var
 Form1: TForm1;
 
 implementation
 
 {$R *.lfm}
 
 { TForm1 }
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 Chromium1.Load('http://wellsit.ru/index.html');
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 begin
 Chromium1.Load('file:///local.html');
 end;
 
 procedure TForm1.Button3Click(Sender: TObject);
 var
 HTTP:THTTPSend;
 begin
 HTTP:=THTTPSend.Create;
 if HTTP.HTTPMethod('GET','http://wellsit.ru/images/1.jpg') then begin
 showmessage(IntToStr(HTTP.ResultCode));
 HTTP.Document.SaveToFile('1.jpg');
 end;
 HTTP.Clear;
 if HTTP.HTTPMethod('GET','http://wellsit.ru/img/2.jpg') then begin
 showmessage(IntToStr(HTTP.ResultCode));
 HTTP.Document.SaveToFile('2.jpg')
 end;
 
 end;
 
 end.