1

在此处输入图像描述

上面你可以看到谷歌的账户注册页面告诉我一个用户名已经被占用了。首先,这就是我认为它告诉我的方式:

  1. 在文本输入失去焦点后,将对 Google 网络服务器中某处的文件进行 AJAX 调用
  2. 服务器(我相信运行 Python?)处理用户名并通过查询对数据库执行检查。
  3. 一旦数据库执行了查询,结果就会返回给服务器。
  4. 然后它被返回到浏览器,在那里它变得漂亮,并以一种对用户有用的方式通知我结果。

我的问题与处理发生的位置有关。无论处理发生在哪里,它纯粹是为本页面服务的目的。我作为任何人都不应该能够在 Google 执行此检查并将数据发布到它并查看响应的位置找到此文件。我想知道是什么阻止了我,谷歌是如何阻止我手动对这个正在检查的 Python 文件进行检查的?或者他们根本没有?

目前我正在使用 PHP 做与谷歌在这里做的完全相同的事情。通过 AJAX 调用的 PHP 文件与注册位于同一目录中,称为“check.php”。如果您要在我的网络服务器上向该文件发布用户名,您会看到响应,这就是我需要停止的(或者我应该不停止它?)。如何才能做到这一点?

谢谢

4

1 回答 1

1

如果我理解正确,您正在尝试确定请求是否通过 ajax,如果不是,则阻止请求...

你有几个选择(会错过一些):

  1. 将“session_id”附加到表单并在“check.php”页面上进行验证。如果有效,则继续。
  2. 查找 AJAX 请求标头(下面的示例)。这不一定可靠,因为可以操纵标头
  3. 使用 jQuery 自己操作标头ajax,然后在“check.php”上对其进行测试

选项 2 的示例:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'){
    // I'm AJAX!
}

您还有其他选择,但这应该是一个好的开始......

于 2013-10-21T09:40:55.400 回答