繁体   English   中英

HTTP_REFERER困境:只有当访问者事先访问过另一个特定页面时,我才能允许访问特定页面?

[英]HTTP_REFERER woes: How can I allow access to a specific page, only when a visitor has visited another specific page beforehand?

PHP新手在这里疯狂地挣扎着如何在我糟糕的下载系统中实现基于HTTP_REFERER的安全功能。

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

?thanks

如果在URL中可以看到,那么用户将能够下载位于其上的文件。 它的效果很好,但只需在URL本身上添加“?thanks”部分即可轻松“解锁”页面。 有效地允许用户绕过我笨拙的安全性并轻松访问我的高级文件。

如果可能的话,我想添加一个安全措施,任何试图访问包含以前没有从包含'?pending'的页面到达的字符串'?thanks'的页面的人都被重定向到主页。 这将为我提供完美的解决方案。

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

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

啰嗦,是的,但对于我不寻常的要求来说,这将是非常理想的。 我也知道用户可以通过首先在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.';
}

如果这一切只取决于请求本身的信息 ,那么就没有办法强制执行你想要做的事情。 引用者也只是一个任意请求头

你需要的是实际的服务器端状态 为用户打开一个会话,给出他正在经历一个随机唯一ID的过程,该ID在过程中的每个页面上传送,并保存会话中接下来要显示的进度和消息。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM