PHP Разрешить доступ только к определенному URL-адресу реферера / странице

Поэтому мой вопрос прост. Ive использовал следующий метод для разрешения доступа к скрипту php через имя домена реферера, но я хочу разрешить доступ только для рефереров, соответствующих полному URL-адресу.

<?php if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'domain.com') { echo "Eexcuting code here"; } else { echo('Hot Linking Not Permitted'); // display some message / image / video exit; } ?> 

Поэтому, если URL-адрес реферера соответствует http://www.domain.com/page.html, тогда разрешите доступ к другому, если заблокировать его.

Это не будет безопасно, потому что данные реферера могут быть легко подделаны. Однако, если он по-прежнему соответствует вашим потребностям, тогда вы должны быть в порядке с вашим кодом, так как $_SERVER['HTTP_REFERER'] содержит полный URL-адрес реферера, а не только домен. На самом деле, ваш настоящий код нуждается в некоторых настройках, потому что он не может работать так:

 <?php // This is to check if the request is coming from a specific domain $ref = $_SERVER['HTTP_REFERER']; $refData = parse_url($ref); if($refData['host'] !== 'domain.com') { // Output string and stop execution die("Hotlinking not permitted"); } echo "Executing code here"; ?> 

Обратите внимание, что если вы проверяете, установлен ли HTTP_REFERER, прежде чем проверять, хочет ли он вас, люди могли бы получить ваш скрипт без какого-либо набора рефереров, поэтому вы должны его проверить в любом случае. Теперь проверка определенного URL-адреса намного проще:

 <?php // This is to check if the request is coming from a specific URL $ref = $_SERVER['HTTP_REFERER']; if($ref !== 'http://domain.com/page.html') { die("Hotlinking not permitted"); } echo "Executing code here"; ?> 

Что вы пытаетесь защитить?

Вы не должны доверять HTTP_REFERER, поскольку его можно подделать (как указывали другие). Кроме того, некоторые брандмауэры и программное обеспечение для обеспечения безопасности будут переписывать или удалять реферера, и не все браузеры сообщают об этом должным образом.

Если это конфиденциальные данные, то лично я бы передал хэш между страницами.