繁体   English   中英

如何验证对PHP文件的AJAX请求?

[英]How to authenticate an AJAX request to a PHP file?

在我的网站上,我有一个注册页面,该页面发出一个AJAX请求,以检查输入后是否有用户名。 此文件名为check.php,与registration.php文件位于同一目录中。 当数据发布到check.php时,它将在MySQL数据库中执行查询并返回它使用该用户名找到的用户数。

如果有人要将数据发布到check.php文件,他们也会看到结果。 我需要以某种方式停止这一点,我已经阅读了几个答案,我需要“验证”每个请求。 这可能是一个非常大的话题,虽然我不太清楚要搜索什么来找到它的更多信息。 验证每个请求是否是阻止不必要的用户名检查的好方法? 如果是这样的话,我真的很感激,如果有人能指出我正确的方向如何做到这一点。

解决方案是在会话中生成唯一标记,并将其放在将包含表单的所有页面中。 在您制作的每个AJAX请求上发布此令牌。 它被称为CSRF保护, 跨站请求伪造

您可以在HTTP标头中添加检查用户引用的保护层。

常见情况的答案: - 你无法阻止这种情况,因为AJAX只是一个HTTP请求。 无论您如何保护您的服务器,都可以发送它。 因此,如果重点是 - 保护免受'邪恶的黑客'的攻击 - 那么就没有办法做到这一点。 但正确的是检查/验证服务器端的任何内容。

但这只是基本检查,你可以阅读

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest')

- 但要注意 - 这也是一个来自客户端的数据,即它不可信(实际上,它只是HTTP请求头,仅此而已)

我认为你可以在用户登录你的应用程序时创建一个Session变量,并检查这个变量是否具有正确的值,当你向'check.php'文件发帖时检查你的用户是否是以前的身份验证

缺少很多信息,但从概念上讲,我不确定你是否担心真正的风险。 最重要的是,人们可以使用您的表单来检查电子邮件是否存在,因此他们也可以使用check.php。 尝试防止这种情况会有点过分。

我有一个想法 - 您可以生成一些唯一的令牌,在显示页面之前将其存储在SESSION上。 在每次检查时,您必须添加此令牌以进行请求。 check.php必须重新生成令牌并将其返回给新。

但是每个请求都可以模拟,并且它不能保护您免受那些希望了解check.php结果的人的影响。 什么都没有保护......

您还可以制作分析ip请求进行检查的机制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM