3

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

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

4

5 回答 5

8

一种解决方案是在会话中生成一个唯一的令牌,并将其放在将包含表单的所有页面中。在您发出的每个 AJAX 请求上发布此令牌。它被称为 CSRF 保护,Cross-Site Request Forgery

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

于 2013-10-21T09:53:53.827 回答
3

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

但它只是关于基本检查,你可以阅读

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

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

于 2013-10-21T09:47:54.933 回答
0

我认为您可以在用户登录您的应用程序时创建一个 Session 变量,并在您将某些内容发布到“check.php”文件以检查您的用户是否以前经过身份验证时检查该变量是否具有正确的值

于 2013-10-21T09:47:52.763 回答
0

缺少很多信息,但从概念上讲,我不确定您是否担心真正的风险。底线是人们可以使用您的表单来检查电子邮件是否存在,因此他们也可以使用 check.php 是合乎逻辑的。试图阻止这种情况将是矫枉过正。

于 2013-10-21T09:49:20.707 回答
0

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

但是每个请求都可以模拟,它不能保护你免受那些想知道 check.php 结果的人的伤害。没有什么保护...

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

于 2013-10-21T09:49:59.113 回答