2010-07-25 4 views
3

Я хотел бы поместить ссылку на мой сайт в других «одобренных» доменах. Когда они нажимают на ссылку, она переходит на страницу, которая проверяет реферер ($ _SERVER ['HTTP_REFERRER']), чтобы убедиться, что они пришли из домена, который одобрен для моей ссылки. Это может быть подделано, так как я могу убедиться, что клики действительно поступают из одобренных доменов?PHP referrer: Как убедиться, что запрос действительно исходит от того, откуда он должен прибыть из

ответ

8

Вы не можете этого сделать. Вы не можете предотвратить перенаправление реферера.

Альтернатива будет возможна, если есть сотрудничество между несколькими сайтами. Например, ссылки на других сайтах, принадлежащих вам, могут передавать токен в качестве параметра в URL-адресе, который можно использовать только один раз и который вы могли бы затем проверить.

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

+1

Действительно, писал о том же. Аффилированные лица и т. Д. Обычно решают это, отскакивая назад и вперед, устанавливая некоторые файлы cookie и получая параметры в URL-адресе, который они могут проверить, и какой смысл не может быть легко взломан (хеши по URL-адресу и соли и тому подобное). – Wrikken

+1

Генерация и валидация подписи будут аналогичны тому, что делает OAuth, - вы можете даже взглянуть на использование кода из библиотеки OAuth для этого. Убедитесь, что в URL-адресе есть параметр timestamp, который вы можете проверить, чтобы предотвратить повторное использование устаревших ссылок. Либо дайте достаточную свободу действий для проверки времени, когда люди нажимают ссылки через некоторое время после их загрузки, или делают ссылки на странице фактически перенаправлены на только что сгенерированный и подписанный URL-адрес, что дает вам возможность сократить время истечения срока действия. – Nick

+0

Использование timestamp based nonce - хорошая стратегия, потому что вам не нужно хранить все ноты, которые вы когда-либо видели, чтобы отказать им в будущем. Вы можете хранить только те, которые видны, например, последние говорят 3 часа и отвергают все, что старше. Если вы можете жить с некоторыми повторными токенами в небольшой промежуток времени, вы даже не можете ничего хранить. – Artefacto