Apache 2: Предотвратите serverwide использование горячих ссылок изображения

Большинство стандартных включено в другие ответы, таким образом, я пойду fo нестандартные:

  • htop — большой для управления процессами;
  • пинго — рысь как браузер для получения информации и страниц справочника.

3
задан 23 May 2017 в 15:41
4 ответа

У меня есть решение, даже если это не очень красиво, потому что это оставляет ошибку по умолчанию 403 документами измененный, даже если изображение не является hotlinked:

Это входит в apache2.conf:

    SetEnvIfNoCase Referer "livejournal.com" hotlink

    <FilesMatch ".(gif|jpg|jpeg|png)$">
            ErrorDocument 403 /server404/no_hotlink.php
    </FilesMatch>
    <FilesMatch ".(gif|jpg|jpeg|png|mpg|avi|flv)$">
            deny from env=hotlink
    </FilesMatch>

    Alias /server404 "/var/www/_404"
    <Directory "/var/www/_404">
        AllowOverride AuthConfig
        Order allow,deny
        Allow from all
    </Directory>

Мы использовали путь/server404 для ошибочного serverwide 404 документа в течение некоторого времени, таким образом, у нас уже было это. Вы могли также назвать его 403 или GlobalNoHotlink или независимо от того, что Вы хотите.

Для изображений (первый FilesMatch) мы устанавливаем "запрещенный" ErrorDocument на файл PHP в нашем/server404 каталоге. Затем мы проверяем, является ли это hotlinked (там, мы также делаем это для видеофайлов, таким образом два тега FilesMatch), и запретите доступ если hotlinked.

Это входит в/var/www / _ 404/no_hotlink.php - файл PHP обратился к запрещенному изображению:

    <?PHP
    $file = dirname(__FILE__) . '/_default/no_hotlink.png';

    header('HTTP/1.1 200 OK', true, 200);
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header('Content-length: ' . filesize($file));
    header('Content-type: image/png');
    readfile($file);
    ?>
  • Первая строка используется для идентификации файла изображения, который мы хотим отослать.
  • Затем мы устанавливаем HTTP-заголовок на 200 (это является дополнительным. Решите для себя),
  • добавьте некоторые заголовки, чтобы не кэшироваться изображения (мы не хотим позволять этому 8000x8000, розовый пиксельный файл появляется "от кэша" на нашем сайте, если человек решает перейти к нашему сайту, не так ли?).
  • Довольная длина согласно размеру фиктивного файла и
  • Тип MIME (Вам, возможно, придется изменить последнего не использования PNG).
  • Затем мы читаем файл.

Это работает - но это не столь красиво, как я хотел бы иметь его, так все еще будет довольно другими решениями.

2
ответ дан 3 December 2019 в 08:27

У меня есть что-то вроде этого в моем httpd.conf:

RewriteCond "%{HTTP_REFERER}" !=""
RewriteCond "%{HTTP_REFERER}" "!^http://www.mydomain.com/.*$" [NC]
RewriteRule "\.(jpg|png)$ - [F]

Вы, возможно, должны были бы использовать это также, если Вы не использовали RewriteConds и RewriteRules прежде:

RewriteEngine On

Я нашел это googleing или в Поваренной книге Apache. Не может больше помнить.

0
ответ дан 3 December 2019 в 08:27
  • 1
    Можно изменить последнюю строку этого для перезаписи URL, чтобы указать на другое изображение, вместо того, чтобы возвратиться 403. –  David Pashley 3 June 2009 в 19:36
  • 2
    Как указано в моем Вопросе: RewriteEngine не работает в моей среде. Не уверенный, почему. Я использую все это по месту. Возможно, RewriteRules, указанные в глобальной области видимости, перезаписываются локальными .htaccess файлами. –  BlaM 3 June 2009 в 19:43

Единственный эффективный способ сделать, с модификацией, переписывают правила. Если ссылающийся домен не от Вашего собственного домена, то перепишите URL изображения, чтобы быть тем, который является несуществующим, где-то в другом месте, или прозрачный gif 1 пкс на 1 пкс.

Много людей делает это с изображением, в котором не говорится 'Вожделение, приятель' или подобный

-1
ответ дан 3 December 2019 в 08:27
  • 1
    Это doesn' t, кажется, возможны использовать mod_rewrite в глобальной конфигурации. –  BlaM 3 June 2009 в 18:08

проверка ссылающегося домена не всегда работает, некоторые прокси, или даже браузеры разделяют заголовок HTTP_REFERER из запросов HTTP.

намного лучше проверить некоторые cookie в Ваш генерирующий содержание код [например, index.php, который генерирует картинную галерею], и начните работу, модификация - переписывают или apache2 уровень, если cookie установлен на математическое ожидание.

посмотрите здесь или здесь.

-1
ответ дан 3 December 2019 в 08:27
  • 1
    Я думаю, что существует намного больше людей без cookie, чем без ссылающегося домена. Также: Я могу жить с несколькими изображениями hotlinked, проскальзывающими через, если почти любой человек видит неправильное изображение. Это должно быть достаточно раздражающим для " кража webmaster" удалить файл в целом. В конце, that' s, что я хочу. –  BlaM 3 June 2009 в 19:43