Php 在负载平衡器上形成nonce?

Php 在负载平衡器上形成nonce?,php,forms,load-balancing,nonce,Php,Forms,Load Balancing,Nonce,我们正试图将机器人对搜索URL的点击率降至最低,这意味着它不会加载表单,而只是发送参数,我认为在隐藏输入中使用nonce可以解决这一问题,但我们的管理员说,负载平衡的服务器可以从一台服务器发送表单nonce,但表单提交可以由另一台服务器处理。。。因此,我不确定我们如何才能让它发挥作用,当我在网上搜索整个问题时,我得到了似乎不相关/不相关的结果 几年前,我曾处理过一些表单nonce实现,但它们都通过同一台服务器——一台是由CakePHP自动生成的,另一台我不记得我们是如何实现的。在CentOS 6

我们正试图将机器人对搜索URL的点击率降至最低,这意味着它不会加载表单,而只是发送参数,我认为在隐藏输入中使用nonce可以解决这一问题,但我们的管理员说,负载平衡的服务器可以从一台服务器发送表单nonce,但表单提交可以由另一台服务器处理。。。因此,我不确定我们如何才能让它发挥作用,当我在网上搜索整个问题时,我得到了似乎不相关/不相关的结果

几年前,我曾处理过一些表单nonce实现,但它们都通过同一台服务器——一台是由CakePHP自动生成的,另一台我不记得我们是如何实现的。在CentOS 6.x服务器上,我们将httpd与PHP5.x一起使用,而实时服务器有一个提供请求的暂存服务器,然后是10个负载平衡器,不确定这是否真的重要,但它们在访问同一个数据库时有一个文件系统和代码的副本


管理员对负载平衡很熟悉,我从来没有这样做过,他说他可能能够实现某种持久性或使用memcache-d或类似的东西,我从来没有尝试过,但对此我不太确定。

是的,暂时是一个好的选择。工作流程可以是

获取表单请求 生成一个随机的nonce值,例如bin2hexopenssl\u pseudo\u random\u bytes16 将nonce存储在持久共享存储中。如果您不使用会话,像Redis或memcache这样的简单键值存储将是合适的。 将nonce添加到cookie或隐藏表单值中的响应中。 表单被发回负载平衡器。如果将cookie用于nonce,负载平衡器可以立即拒绝任何缺少cookie的请求。否则,请求将发送到其中一个web服务器。 PHP从表单POST或cookie中读取nonce。如果缺少,请拒绝请求,例如404。 已检查当前的共享存储或会话。如果未找到,则拒绝响应。如果找到它,请将其从存储器中删除,以便不能再次使用,然后处理表单提交。
基本上有两种方法可以解决这个问题。您可以在负载平衡器上实现粘性会话,也可以将nonce存储在所有Web服务器都可以看到的位置—这可以是一个共享会话存储,如memcache、数据库,甚至只是一个网络目录。或者两者兼而有之。什么最有意义取决于您的基础架构。