Что вы можете сделать, это сгенерировать ключ, который действителен до установленного времени, используя PHP, например:
$password = "some random string";
$key = md5($password . $_SERVER['REQUEST_TIME']) . "|" . $_SERVER['REQUEST_TIME'];
Таким образом, вы узнаете, когда ключ был сгенерирован, и был ли он подделан, потому что:
function check($key) {
list($hash, $timestamp) = explode("|", $key, 2);
if ($hash !== md5($password . $key)) {
throw new Exception("Naughty!");
}
if ($timestamp < $_SERVER['REQUEST_TIME'] < 60*60) {
throw new Exception("too old");
}
}
Недостатком является то, что у людей, которые не обновляют страницу очень часто (в моем примере это 1 час), срок действия их ключа истекает.
Другая проблема заключается в том, что ваш«Злоумышленник» может технически сначала очистить страницу, чтобы получить новый ключ и использовать ее, а затем очистить снова, когда истечет срок его действия и т. д.
Это решение очень хорошо работает для защиты от хотлинкинга.