Determining Referer in PHP

后端 未结 5 1372
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-22 04:01

What is the most reliable and secure way to determine what page either sent, or called (via AJAX), the current page. I don\'t want to use the $_SERVER[\'HTTP_REFERER

相关标签:
5条回答
  • 2020-11-22 04:32

    We have only single option left after reading all the fake referrer problems: i.e. The page we desire to track as referrer should be kept in session, and as ajax called then checking in session if it has referrer page value and doing the action other wise no action.

    While on the other hand as he request any different page then make the referrer session value to null.

    Remember that session variable is set on desire page request only.

    0 讨论(0)
  • 2020-11-22 04:40

    Using $_SERVER['HTTP_REFERER']

    The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

    if (!empty($_SERVER['HTTP_REFERER'])) {
        header("Location: " . $_SERVER['HTTP_REFERER']);
    } else {
        header("Location: index.php");
    }
    exit;
    
    0 讨论(0)
  • 2020-11-22 04:43

    What I have found best is a CSRF token and save it in the session for links where you need to verify the referrer.

    So if you are generating a FB callback then it would look something like this:

    $token = uniqid(mt_rand(), TRUE);
    $_SESSION['token'] = $token;
    $url = "http://example.com/index.php?token={$token}";
    

    Then the index.php will look like this:

    if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
    {
        show_404();
    } 
    
    //Continue with the rest of code
    

    I do know of secure sites that do the equivalent of this for all their secure pages.

    0 讨论(0)
  • There is no reliable way to check this. It's really under client's hand to tell you where it came from. You could imagine to use cookie or sessions informations put only on some pages of your website, but doing so your would break user experience with bookmarks.

    0 讨论(0)
  • 2020-11-22 04:48

    The REFERER is sent by the client's browser as part of the HTTP protocol, and is therefore unreliable indeed. It might not be there, it might be forged, you just can't trust it if it's for security reasons.

    If you want to verify if a request is coming from your site, well you can't, but you can verify the user has been to your site and/or is authenticated. Cookies are sent in AJAX requests so you can rely on that.

    0 讨论(0)
提交回复
热议问题