如果用户来自特定网址,如何运行功能?

时间:2016-06-08 12:50:50

标签: php

所以我有一个提交功能的页面。单击“提交”后,您将进入名为send.php的站点 我不希望人们能够刷新网站,这样就可以针对垃圾邮件发送两次或更多相同的答案。我认为这样做的一种方法是确保它们来自提交站点,如果可能的话。另一种方法是,如果他们试图刷新,也可以重定向它们。 有没有办法做到这一点?或者另一种解决我的问题的方法

2 个答案:

答案 0 :(得分:0)

查看HTTP_REFERER变量。它将告诉您用户访问您的网站之前所使用的网站。

它会为您提供如下信息:

  

192.168.1.10 - - [16 / Apr / 2008:16:12:36 +1200]“GET / php-http-referer-variable / HTTP / 1.1”200 2014   “http://www.websitefromexample.com/”Mozilla / 5.0(兼容;   Konqueror中/ 3.5; Linux)KHTML / 3.5.8(如Gecko)“

答案 1 :(得分:0)

$ _ SERVER [' HTTP_REFERER']应该包含引用页面。但是:

  • 出于隐私原因,客户可能会将其删除
  • 它可能被客户修改(其内容毕竟来自客户的请求,通过协议设计)
  • PHP documentation中所述:简而言之,它无法真正被信任。

成功收到提交后进行重定向应该会很好,因为它会将用户转移到提交处理代码之外(假设您重定向到其他地方..)

但是,在进行原始的合法提交时,有黑帽子的人可能仍会将请求记录到服务器。并重复使用它。所以重定向方法应该足以让你保持安全"来自普通用户,但不是来自想要来垃圾邮件的人。它就像你的网站所在的展位并接受提交的内容,然后礼貌地告诉提交提交的人去那里"移动到那里"。没有锁或任何东西。这个人甚至可能会忽略继续前进的请求。

如果你:

  1. 为您的表单添加一些隐藏字段,其中包含一些足够难以猜测的值(变化,而不是一些常量短语!)
  2. 将其存储在会话数据,数据库或适合您的
  3. 如果隐藏字段的值与您的存储值匹配
  4. ,则将您的代码重写为仅接受提交

    然后你在你的摊位上放了一个舱口,只有那些知道给他们的密码的人才能打开。您已限制用户访问提交处理的方式。秘密值应在使用后丢弃,否则可以重复使用并失去其目的..

    用户仍然可以在表单页面和提交/表单目标页面之间切换以接收新的秘密值,并且每次都允许进行新的提交。如果您想限制允许用户提交的提交数量,那么您应该跟踪用户最近请求表单页面的次数。

    ..当然,如果需要,请在处理代码中查找禁用词等。