Любая проверка на стороне клиента, которую вы делаете, может быть обойдена.Для надежного механизма вам потребуется задействовать сервер: кликнув по ссылке, отправьте на сервер сообщение с подписью браузера (включая IP), которое вы записываете с указанием даты / времени.Когда запрашивается защищенная страница, проверьте подпись браузера в запросе и убедитесь, что она соответствует подписи, полученной в течение приемлемого времени до запроса.Это также может быть обойдено, чуть менее просто.
С точки зрения механизмов только на стороне клиента (которые, опять же, легко обойти):
ВыВозможно, люди заставят вас указать на document.referrer
, но чрезвычайно легко подделать, и я бы не стал на это полагаться.
Единственный другой способ, которым я могу думать, - это если обе страницы имеют одинаковое происхождениеЕсли это так, когда пользователь щелкает ссылку в iframe, вы можете установить значение в localStorage
:
// (In a click handler on the link)
localStorage.setItem("clicktime", Date.now());
... и на странице:
var MAX_DURATION = 500; // milliseconds
var clicktime = localStorage.getItem("clicktime");
if (!clicktime || isNaN(clicktime) || Date.now() - MAX_DURATION > 500) {
// Disallow access by (for instance) redirecting or similar
}
... но опять же, механизмы на стороне клиента легко обойти.