Javascript API请求:如何确保仅';允许';webforms会收到答复吗?
我经营一个免费创建数字生成内容的网站。我的访问者也不需要帐户来开始下载。它的工作非常简单:最终用户填写表单,表单向PHP脚本(“API”)发送请求,PHP脚本返回结果Javascript API请求:如何确保仅';允许';webforms会收到答复吗?,javascript,php,authentication,Javascript,Php,Authentication,我经营一个免费创建数字生成内容的网站。我的访问者也不需要帐户来开始下载。它的工作非常简单:最终用户填写表单,表单向PHP脚本(“API”)发送请求,PHP脚本返回结果 ? +---------+ +---------+ | | -----------> | | |FORM.html| | API.php | | |<
?
+---------+ +---------+
| | -----------> | |
|FORM.html| | API.php |
| |<-------------| |
+---------+ +---------+
digital
content
?
+---------+ +---------+
| | -----------> | |
|FORM.html | | API.php|
| |
我也考虑过在表单中添加额外的变量,但这也没有帮助。黑客只需要识别和复制这些变量
通过不每次使用(并检查)相同的值,而是使用只能在有限时间内使用一次的令牌,您可以让这变得更加困难。这基本上就是所谓的CRSF令牌
有关该主题的更多信息的一些链接:
您尝试使用CSRF令牌对抗的典型攻击/问题是有人触发允许登录用户以其名义执行的操作;但是,在像这里这样的情况下,您可以用一种非常类似的方式实现它,以尝试阻止人或机器人在不使用表单的情况下向您的端点发送数据。您不能。这基本上相当于DRM,它从未起过作用。无论您要求客户如何检查,它都可能对您的服务器撒谎。@JosephSible谢谢您的回答/评论!@“所有其他人”,为什么投反对票?不是每个人都是专家。。。我觉得我的问题是具体的,我表明我已经做了研究并试图解决它。这真的是一个低质量的问题吗?如果是这样的话:为什么?“我也考虑过在表单中添加额外的变量,但这也没有帮助。黑客只需要识别和复制这些变量。”-你可以让这变得更难,不必每次都使用(并检查)相同的值,而是使用只能使用一次且时间有限的令牌。这基本上就是所谓的CRSF令牌…另一种方法当然是使用验证码。这些都不是很方便用户,但“机器人”在大部分情况下仍然很难绕过它们。@misorude CRSF听起来确实是目前为止最好的解决方案。谢谢,我不知道这项技术的名称,现在我可以进一步研究它。事实上,验证码也是一个非常明显的开始。这(很糟糕)试图确保循环中有人,但根本没有试图验证请求是否来自网站自身的表单。@Suzie如果您能解释一下您的脚本是API的示例实现,那就好了。@Suzie否,你的答案现在仍然和编辑前一样糟糕。你的代码的任何读者都应该清楚,他们是如何完全绕过它提供的所有“安全性”的。请帮助我们。实际上,我在自己的网站上使用了服务器名称示例,我使用它包装了所有页面内容。我一直想改进,给我们举个例子,我看到你自己也是一个出色的程序员。CSRF令牌在这里没有帮助。询问者希望防御非网站的内容(例如客户端本地机器上调用wget/curl的脚本),因此不受同源策略的约束。这样的脚本只需获取表单,刮取值,然后在提交表单时使用它。@JosephSible如前所述,这会让它变得更难,机器人程序无法只分析表单结构一次,他们每次都必须请求一个新表单才能获得有效令牌。如果有人真的付出努力,这是无法阻止的,这一点很清楚。CAPTCHA被认为是一种限制人类使用的替代方案,但被认为具有侵入性。
Use google Captcha in your form
https://www.google.com/recaptcha
//take a leaf out of payment gateway validation
$acceptfrom = array(
'www.yourserver.com',
'yourserver.com'
);
if( !in_array( $_SERVER['REMOTE_ADDR'], $acceptfrom ) )
{
//break and redirect to another page here
} else {
//include Captcha validation here
//validate form variables and send to API
}