Проверьте 2 файла cookie с помощью mod переписать перед подачей изображений


У меня есть следующее правило mod_rewrite, которое отлично работает в моем Apache 2.x на машине CentOS 6 Linux, но оно не завершено:

RewriteCond %{HTTP_COOKIE} !id
RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteRule .* /images/dummy.png [L]

Потому что я пытаюсь изменить его 2 способами:

  1. На самом деле должно присутствовать 2 файла cookie (а не только 1, как указано выше): идентификатор и аутентификация (но я не знаю, как сделать (X или Y) и Z с mod_rewrite)

  2. Я хотел бы убедиться, что значение файла cookie auth является строкой из 32 шестнадцатеричных символов (хэш MD5) и что значение файла cookie id является числовым.

Предыстория такова, что я получил счет на 1000 евро, - от Гетти Изображения, потому что один из пользователей Drupal на моем сервере предположительно использовал их фотографию в качестве аватара. Я не ищу здесь никаких советов юриста или псевдо-юриста, просто для того, чтобы показать веб-сканерам фиктивное изображение вместо реальных изображений пользователей.

И да, я заметил в mod_rewrite doc, что я мог бы передать значения файлов cookie внешнему скрипту через mod_rewrite (для проверки хэша MD5), но я хотел бы заняться этим позже.

ОБНОВЛЕНИЕ 2:

Я пришел к следующему

RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteCond %{HTTP_COOKIE} !auth=[a-fA-F0-9]{32} [OR]
RewriteCond %{HTTP_COOKIE} !id=[0-9]+
RewriteRule .* /images/dummy.png [L]

Но я не уверен, действуют ли вышеуказанные RewriteCond как X и (Y или Z) или (X и Y) или Z

Author: Alexander Farber, 2011-10-18

2 answers

Как насчет этого:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !(^|;\s*)id=[0-9]+(;\s*)auth=[0-9a-fA-F]{32}(;\s*)
RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteRule .* /images/dummy.png [L]
 2
Author: quanta, 2011-10-18 10:49:19

Но я не уверен, действуют ли приведенные выше секунды перезаписи как X и (Y или Z) или (X и Y) или Z

В опубликованных вами директивах это первое: X и (Y или Z)

Однако, как упоминалось в моем комментарии выше, более эффективно выполнять проверку URL-пути в RewriteRule шаблон - так как это то, что обрабатывается в первую очередь. Это позволяет избежать обработки RewriteRule для каждого запроса (как это происходит при использовании универсальный шаблон, такой как .*). Затем у вас есть только два условия ORd, которые проверяют отсутствие любого из файлов cookie (в любом порядке). Например:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !(^|;\s*)id=[0-9]+ [OR]
RewriteCond %{HTTP_COOKIE} !(^|;\s*)auth=[0-9a-fA-F]{32}
RewriteRule ^/sites/default/files/pictures/picture- /images/dummy.png [L]

Префикс шаблона (^|;\s*) перед именем файла cookie предназначен только для защиты от ситуации, когда у вас есть другие файлы cookie с аналогичным (но более длинным) именем. например. uid или userauth и т.д. Если это невозможно, то этот подшаблон можно опустить.

Нет необходимости проверять наличие (;\s*) в конце значения файла cookie, как в @quanta ответьте, так как это не является частью ценности, которую вы пытаетесь проверить. И заголовок Cookie: в любом случае не должен заканчиваться на ;, так что это может даже не совпадать.

 2
Author: MrWhite, 2018-01-12 01:00:14