gpt4 book ai didi

php - 如何从 .JS 文件中重置一次性 PHP 表单 token 以防止表单泛滥?

转载 作者:行者123 更新时间:2023-11-30 23:15:19 25 4
gpt4 key购买 nike

我在尝试保护我的 indev 网站时遇到了障碍。该索引是一个 PHP 文件,它使用 Google Maps v3 API 显示我所在城市的 map ,用户可以在其中添加自己的标记。一旦他们添加了一个标记,他们就可以点击它来打开一个信息框,其中包含一个允许他们提交关于该位置的各种信息的表单。表单只是一个用 JS 编写的 DOM 元素,POSTS 到一个 PHP 脚本,该脚本在参数化数据并将其插入 MySQL 数据库之前验证数据。该网站必然不需要注册,因此我尝试通过创建 PHP 脚本验证的一次性 token 来阻止表单泛滥,但没有成功。

具体来说,我的问题是:我可以最初在 index.php 文件中创建 token ,然后在表单成功发布到 add.php 脚本后取消设置,但我无法从使用新 token 更新隐藏表单元素的 JS 文件。

这是代码中发生的事情 --

来自 index.php(在页面加载时创建 token 的地方):

$_SESSION['stoken'] = sha1(uniqid(mt_rand(), true));

现在 token 已创建,我将其分配给 JS 变量,如下所示:

var stoken = "<?php print($_SESSION['stoken']); ?>";

现在,我的外部 .JS 文件可以访问“stoken”,并在用户访问后将其放入 Google Maps InfoBox 窗口的隐藏表单元素中。然后用户提交表单,我的 add.php 文件验证 $_SESSION['stoken'] 等同于 POSTed 隐藏表单值。然后取消设置 $_SESSION['stoken']。

这就是我卡住的地方。我无法从 .JS 文件中运行任何 PHP 来为用户可能创建和填写的下一个信息框设置或访问新 token 。如果我允许用​​户对每个 InfoBox 使用相同的标记,那么在桌面上创建一个 HTML 文件以在数据库中充斥条目将非常简单。数据验证可防止某人输入一堆随机 BS,但个人仍然可以用略有不同的值一遍又一遍地用“合法”信息填充数据库。

到目前为止,我想出了两个“解决方案”:

(1) 我可以强制重新加载页面,这会创建一个新 token

(2) 我可以设置 .htaccess 来指示 Apache 在 JS 文件中处理 PHP,允许我让新 InfoBoxes 的创建函数知道新 token

在我看来,这两种选择都是逃避,只有像我这样的新手才会诉诸于此,而且它们可能会导致其他问题。我感谢任何帮助以更优雅和合理的方式解决这个问题。谢谢。

最佳答案

由于您使用 AJAX 请求来创建 Stoken(如果我的文本正确),您可以只返回以下值:

$_SESSION['stoken'] = sha1(uniqid(mt_rand(), true));

然后写成JS Var。这样做,您还将激活正确的 Stoken,为了给您提示如何操作,带有您的 Javascript 代码的 JS Fiddle 将是完美的。

根据您的 $.load() 或 $.ajax() 请求,使用 jQuery 这样做的一个例子是:

$.ajax({
url: "XYZ"
}).done(function ( data ) {
stoken=data;
});

您可以在此处找到更多信息: http://api.jquery.com/jQuery.ajax/

关于php - 如何从 .JS 文件中重置一次性 PHP 表单 token 以防止表单泛滥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18149448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com