У меня есть существующий веб-сайт, на котором должна быть ссылка на файл pdf на нашем веб-сервере. Проблема в том, что ТОЛЬКО пользователи, которые прошли аутентификацию при входе на сайт, должны иметь возможность просматривать файл. Я перепробовал все, что мог придумать, и просто не могу понять, как настроить apache, чтобы он делал то, что я хочу. Либо он позволяет всем получить доступ к файлу, либо никто не имеет доступа.
Как мне настроить конфигурацию так, чтобы только запросы от foo.bar.com могли получать файл с blah.baz.com?
Обновить В моем файле конфигурации для моего сайта сейчас есть
<Directory "/usr/local/web/static/foo">
Order allow,deny
Deny from all
Allow from foo.bar.com
</Directory>
Когда я просматриваю сбойный запрос в консоли Chrome, я вижу, что он содержит
Host:blah.baz.com
Referer:http://foo.bar.com/
Вы можете сделать это с помощью mod_write
в этом случае:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !pippo\.com [NC]
RewriteCond %{REQUEST_URI} ^/foo
RewriteRule .* - [F]
Попробуйте подделать реферера:
curl --referer http://www.pluto.com/bot.html http://localhost/foo
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
</body></html>
В итоге я использовал переменную среды Referer, чтобы проверить, поступает ли запрос с правильного сайта. Итак, для примера, который я привел выше, конфигурация будет выглядеть так:
ServerName blah.baz.com
DocumentRoot /usr/local/web/static
SetEnvIf Referer foo.bar.com localreferer
<Directory "/usr/local/web/static/foo">
Order deny,allow
Deny from all
Allow from env=localreferer
</Directory>
Файл должен обслуживаться через ваше приложение, где его содержимое считывается с диска, а затем передается пользователю. Однако, поскольку при использовании этого подхода возникают накладные расходы, многие теперь рекомендуют использовать Apache mod_xsendfile.
Подводя итог, вам нужно будет изменить свое приложение, чтобы делать то, что вы хотите, но использование mod_xsendfile может минимизировать количество изменений, которые необходимо внести в код.
Вы можете обратиться к следующей ссылке в качестве руководства для этого: https://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/