0

我有一个 html 表单,当它被提交时,它调用一个 JavaScript 函数,该函数通过使用 Ajax 从 PHP 文件中使用 post 获取信息并将其显示回页面。

问题是,是否可以使 PHP 文件仅在使用上述方法时才能访问,而不是用户通过 JS 方法并找到它的位置时可以直接访问它?

编辑:添加更多信息以帮助人们。Ajax 正在调用外部 php 文件,以便根据 php 文件返回的内容更新网站的内容。由于所有 Ajax 调用都是在 JavaScript 中进行的,因此有人可以轻松找出函数使用的位置和参数,并且基本上直接调用 php 文件,这是我试图避免的。

在这种情况下,使用 PHP 会话有点困难,因为我使用的是 Ajax,一旦外部 PHP 文件完成,我就无法销毁会话,因为如果我这样做,会话永远不会更新,因为我使用 Ajax 来更新该网站无需刷新。

4

4 回答 4

3

我同意 limscoder。

这是我在提交表单时使用令牌的方式。

1)初始化它并保存在服务器上(当页面在客户端加载时)

$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));

2)将其添加到表单中

<input type="hidden" name="token" value="<?php echo $token;?>" />

3)提交时,我使用检查令牌

if(isset($_SESSION['token'], $_POST['token']) && $_SESSION['token'] == $_POST['token'])
{
//code goes here
}
于 2012-07-02T01:50:54.147 回答
2

听起来您在描述一种跨站点请求伪造。防止这种情况的正常方法是将服务器生成的令牌作为表单值包含在内,然后在提交表单时根据存储在用户会话中的值对其进行验证。查看链接以获取有关如何正确生成和验证令牌的说明。

于 2012-07-02T00:45:38.867 回答
0

您可以通过检查 HTTP_REFERER (http://php.net/manual/en/reserved.variables.server.php) 来测试调用脚本的页面

但是......它可以被欺骗,所以只会阻止随意尝试获取您的数据

于 2012-07-02T00:34:22.937 回答
0

html页面是否安全?如果任何人都可以访问 html 页面来调用您的 ajax 页面,为什么还要花时间尝试保护它。:)

但是,如果您确实需要这样做,您可能需要将 html 页面转换为 php 页面,以便生成要放置在表单中的令牌。一个好的标记是附加年、月、日和小时的秘密字符串的 sha。发回令牌时,用同样的方法生成一个测试令牌,并比较两者。这使得令牌仅在 1 小时内有效。当然,在 ajax 中,您可能需要针对最后一小时的令牌进行测试,以防用户在一小时的最后一分钟收到表单并在该小时后提交。

编辑---如果您主要关心的是机器人,那么只需使用验证码测试。

于 2012-07-02T01:00:05.807 回答