Запретить отправку рефереров при переходе по ссылкам с моего сайта, за исключением одного домена

Допустим, из соображений безопасности или конфиденциальности я хочу глобально установить мою политику реферера быть "no-referrer".

Например, используя Apache .htaccess

Header always set Referrer-Policy no-referrer

или IIS web.config

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Referrer-Policy" value="no-referrer" />
             </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

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

Однако для одного конкретного домена (скажем, https://validator.w3.org/) я хотел бы отправить реферер (например, чтобы использовать удобный url https://validator.w3.org/check?uri=referer).

Я мог бы использовать экспериментальный атрибут referrerpolicy ссылок, но я не знаю, насколько хорошо поддерживается этот атрибут. Я также не знаю, может ли такой атрибут переопределить настройку сервера.

Атрибут link type 'norefferer' кажется хорошо поддерживаемым, но я хочу добиться противоположного!

Как я могу глобально запретить отправку реферера, за исключением ссылок, указывающих на определенный домен?


Отказ от ответственности: (вариант) этот вопрос был опубликован на webmasters.stackexchange.com. Несмотря на вознаграждение, за 2 недели у него было всего 100 просмотров, и был предложен только один ответ. Этот ответ является скорее «доказательством концепции», чем что-либо еще, и не охватывает аспект вопроса «переопределяет ли он конфигурацию сервера?».


person Clément    schedule 27.10.2017    source источник


Ответы (1)


Поскольку заголовок Referrer-Policy: no-referrer указывает агенту пользователя вообще не отправлять заголовок Referer, мало что можно сделать, не затрагивая доставленный контент. В обычном сценарии сервер не знает, какие типы ссылок содержатся в содержимом, а параметры заголовка Referrer-Policy относятся только к происхождению запроса.

Единственный жизнеспособный вариант, который я думаю, — это переписать контент. Поскольку атрибут noreferrer широко поддерживается, вы можете использовать mod_substitute Apache для экземпляр.

Вам нужно будет сформулировать подходящее регулярное выражение для сопоставления ссылок, к которым вы хотите добавить атрибут noreferrer. Что-то вроде <a\s+[^>]*href="(http://)?www.google.com[^"]*">будет соответствовать a тегам, указывающим на главную страницу Google.

person Sami Hult    schedule 04.11.2017