3

我使用 PHP http_referer 为我的网站创建了一个反向链接。它基本上可以工作,但我只想在引用者是我的域的页面时启用它。我考虑过比较引用页面和当前页面中的字符串,但我没有发现它是如何工作的。

这是我的代码:

    <?php // Back link to previous page.

    // If current page has been called by a hyperlink.
    if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] !='') echo '<a href="'.$_SERVER['HTTP_REFERER'].'">&laquo; Go back.</a>';

    // If current page has NOT been called by a hyperlink.
    else return;
    ?>

你能给我建议我应该使用哪个 PHP 函数吗?

4

1 回答 1

2

您可以从中解析 url$_SERVER['HTTP_REFERER']并获取主机名并将其与您自己的进行比较。所以你要找的函数是parse_url()

if(!empty($_SERVER['HTTP_REFERER']))
{
    if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['HTTP_HOST'])
    {
        echo '<a href="'.htmlentities($_SERVER['HTTP_REFERER']).'">&laquo; Go back.</a>';
    }
}

此外,$_SERVER['HTTP_REFERER']用户可以设置它的 htmlentities 来阻止任何 XSS 是一个好主意。

如果他们从您的域进入,PHP 已经处理了一个更安全的想法,那就是使用一些 javascript 代替链接将它们发回。

echo '<a href="Javascript:window.history.back();">&laquo; Go back.</a>';

于 2012-09-27T23:44:05.667 回答