我已经设置了一个相当复杂的HTML表单,它使用了JQuery Validate插件,其中包含几个必填字段和各种规则。表格很好用。它发布到一个单独的PHP处理器文件,该文件执行许多操作,例如发送几封电子邮件并最终将用户发送到Paypal。 (这是一个俱乐部会员申请。)似乎只需要一个星期的时间就可以找到处理器文件并直接反复开始运行某种类型的“机器人”。大约500封电子邮件和应用程序是在我捕获之前生成的,并通过临时重命名文件来停止它。在它发生的时候,我不太确定究竟发生了什么,但是在一天的大部分时间里进行评估之后,我意识到它不能是主要表格被执行的结果,而是仅仅是直接运行处理器文件。
所以......我的问题是:我怎样才能防止这种情况发生?必须要包含某种类型的编码,以确保处理器无法运行,除非它真的来自真正的HTML表单......或者有更好的方法吗?我在'网上关于表格和POST的所有“例子”中都是如此,但我没有看到任何与此类问题相关的内容。
答案 0 :(得分:1)
通常可以通过向表单添加CSRF令牌来减少这种情况。
为您的会话设置一个随机的sha / md5值,并在表单中将该值设置为隐藏输入,在合法用户发送表单时也将传递该值,验证并检查传递的值是否为一个在会议中。如果一切都很好的话。
如果是机器人,机器人需要首先解析CSRF令牌的表单。或者您可以升级并将该安全密钥设置为图像并让用户键入它(验证码)。
How to properly add CSRF token using PHP
你还应该在你的登录表单中添加一些东西,否则你的机器人就会强行进入。
答案 1 :(得分:0)
也许您可以在表单页面上添加$_SESSION[]
全局变量。然后在处理页面上检查它并在执行后取消设置。听起来对我来说是最简单的方式,但你应该听听别人的建议。您可以在此$_SESSION[]
答案 2 :(得分:0)
在生成页面时向表单添加一个标记,并将其保存到会话中。
获得发布数据后,请使用会话中的标记检查令牌。
您可能希望使用CAPTCHA代码来保护自己免受机器人攻击。