【发布时间】:2023-03-04 21:10:02
【问题描述】:
我经营一个免费创建数字生成内容的网站。我的访问者也不需要帐户即可开始下载。它的工作原理很简单:最终用户填写表单,表单向 PHP 脚本(“API”)发送请求,然后 PHP 脚本返回结果。
?
+---------+ +---------+
| | -----------> | |
|FORM.html| | API.php |
| |<-------------| |
+---------+ +---------+
digital
content
目前,PHP 脚本将向任何使用正确参数调用它的对象发送答案。这使得其他网站很容易窃取我的表单并劫持我的服务。此外,足够熟练的人可以通过 CURL、WGET 或任何自动脚本请求此“数字内容”。所以,我的问题是:
问:在回答之前,我如何确保从我的网站上的表单发送请求?
到目前为止,我尝试的是在我的服务器上添加一个额外的 PHP 文件,该文件将“签署”请求 (authenticate.php),然后将其发送到 API。那行得通,但是当然,它只是将问题转移到了这个新文件。这个脚本会愚蠢而愚蠢地签署所有扔给它的东西并将其传递给 API.php
我也考虑过在表单中添加额外的变量,但这也无济于事。黑客只需要识别和复制这些变量。
我不需要终极安全,因为它“只是”一幅画。但是 any 检查总比没有检查好。什么是明智的?
编辑:
我最关心的是使用我的 API 的其他网站。由于内容是免费的,我不太关心访问 API 的机器人或脚本。虽然防止这种情况也很好。
【问题讨论】:
-
你不能。这基本上相当于DRM,它从来没有工作过。无论您要求客户端尝试检查什么,它都可能欺骗您的服务器。
-
@JosephSible 感谢您的回答/评论! @“所有其他人”,为什么投反对票?不是每个人都是专家......我觉得我的问题很具体,我表明我已经完成了我的研究并试图解决它。这真的是一个低质量的问题吗?如果是这样:为什么?
-
“我也考虑过在表单中添加额外的变量,但这也无济于事。黑客只需要识别和复制这些变量。” - 你可以让这更难,不是每次都使用(并检查)same 值,而是使用只能在有限的时间内使用一次。这基本上就是所谓的 CRSF 令牌……stackoverflow.com/questions/5207160/…
-
另一种方法当然是使用验证码。这些不是很用户友好,但“机器人”在大多数情况下仍然很难绕过它们。
-
@misorude CRSF 听起来确实是迄今为止最好的解决方案。谢谢,我不知道这种技术的名称,现在我可以进一步研究它。事实上,验证码也是一个非常明显的开始。
标签: javascript php authentication