【问题标题】:HTTP_REFERER woes: How can I allow access to a specific page, only when a visitor has visited another specific page beforehand?HTTP_REFERER 问题:只有当访问者事先访问过另一个特定页面时,我才能允许访问特定页面?
【发布时间】:2013-04-05 18:03:30
【问题描述】:

这里是 PHP 新手,疯狂地挣扎着想知道如何在我的可悲无能的下载系统中实施基于 HTTP_REFERER 的安全功能。

基本上,我的文件下载页面有一个特定的字符串附加到 URL 的末尾,这个特定的字符串是:

?thanks

如果在 URL 中可见,则用户将能够下载位于其上的文件。它工作得很好,但很容易通过简单地将“?谢谢”部分添加到 URL 本身来“解锁”页面。有效地让用户绕过我笨拙的安全性并轻松访问我的高级文件。

如果可能的话,我想添加一个安全措施,让任何试图访问包含字符串“?谢谢”的页面的人都被重定向到主页。这对我来说是完美的解决方案。

为了清楚起见,典型的预下载过程如下所示:

  • 用户访问下载页面:[网站]/download/page/123/
  • 用户完成 Recaptcha,被重定向到此处:[website]/download/page/123/?pending
  • 用户填写详细信息,被重定向到此处:[website]/download/page/123/?thanks
  • 用户收到他们的文件

啰嗦,是的,但对于我不寻常的要求来说,这将是非常理想的。我也知道用户可以通过先在 URL 中添加“?pending”然后再添加“?thanks”来解决这个问题,但它仍然非常非常有用。

那么,StackOverflow,你们中的任何一位干瘪而善良的编码人员可以帮助一个初出茅庐的网页设计师吗?我感谢您的任何帮助。伙计们干杯。

编辑:哦,这是最后一次尝试但遭到可怕轰炸的失败方法,以防万一它有助于进一步说明我的目标:

if (('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == wp_get_shortlink().'?thanks') && (isset($_SERVER['HTTP_REFERER']) && preg_match("/".preg_quote('?pending',"/")."/i",$_SERVER['HTTP_REFERER']))) {
    echo 'Hurrah!';
} else {
    echo 'Oh dear.';
}

【问题讨论】:

    标签: php download


    【解决方案1】:

    如果这一切都取决于请求本身中的信息,那么就无法强制执行您尝试执行的操作。引用者也只是一个任意的请求标头

    您需要的是实际的服务器端状态。为用户打开一个会话,为他正在经历的进程提供一些随机的唯一 id,该 id 在进程的每个页面中携带,并保存进度和会话中接下来要显示的消息。

    【讨论】:

      【解决方案2】:

      没有像“基于 HTTP_REFERER 的安全性”这样的东西。这是矛盾的。

      一般来说,为了安全起见,您必须使用 SESSION。在您的特定情况下,它似乎也是最合适的:只需在会话中存储访问过任何页面的事实,然后在其他任何页面上检查该值

      【讨论】:

      • 啊,我明白了。谢谢您的答复。请原谅我的无知,但有没有一种方法可以轻松地将基于会话的安全检查插入到页面上并跟踪到下一页?今晚晚些时候,当小家伙们都睡着了,我会去谷歌搜索,我有时间做实验,但我很想知道你是否能在此期间把我引导到正确的方向。再次感谢您查看我的查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2014-07-14
      • 2011-07-31
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多