从 AJAX 获取 PHP 中的 SQL 时不让用户访问其他用户信息的好习惯

Posted

技术标签:

【中文标题】从 AJAX 获取 PHP 中的 SQL 时不让用户访问其他用户信息的好习惯【英文标题】:good practice to not have user access other user's information when fetching to SQL in PHP from AJAX 【发布时间】:2016-05-04 16:13:22 【问题描述】:

我目前正在以这种方式获取用户信息:

require_once '../dbCred.php';

$id = $_GET["id"];

$pdo = new PDO($dsn, $db_username, $db_password, $db_opt);

$stmt = $pdo->prepare("SELECT * FROM utilisateurs WHERE id = :id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();

echo json_encode($stmt->fetch());

我在 AJAX 中调用这个名为 getUtilisateur.php 的页面。

但如果我更改 GET 数据,我可以轻松检索每个用户的信息。

阻止用户访问这些信息的好方法是什么?

我在想一个与用户一起存储的“密钥”,并以这种方式访问​​用户的信息。

编辑:我的应用程序中没有登录 EDIT2:我的应用程序是一项调查,当第一个用户完成调查后,他将其发送给另一个用户,然后我比较两个调查。所以第二个用户得到一个像survey.html?user_id=1这样的URL,我想要的是像survey.html?key=dqqsd454qsq988这样的东西。那可能吗 ?是否足够安全?

【问题讨论】:

嗯,我想到了会议...... 我也在考虑它,但这只会在我的脑海中保护 CSRF 风格的 hack。或者有什么我不明白的地方 是的。登录和身份验证设置一个 SESSION 用户 ID。从那里,您可以在会话中从该 ID 执行特定于用户的查询。或者,如果您想以超级用户身份运行其他用户 ID 的查询,则需要事先进行验证。 我编辑了我的问题,我的应用程序中没有登录。 那么您的应用程序当前如何知道哪个用户正在尝试获取此信息? 【参考方案1】:

如果您没有身份验证,则服务器无法知道进行查询的人是否被允许这样做。

如果您需要这样的安全措施,这似乎是您的情况,您需要实施一个安全的身份验证系统。

【讨论】:

【参考方案2】:

先生,您好。您可以做的一件好事是使用电子邮件/用户名和密码启用登录页面,然后仅通过电子邮件和密码获取用户信息。对于密码,请使用散列和加盐以确保其安全。使用 google recaptcha 也可以防止机器人或脚本被过滤,并始终使用一些 php 清理代码清理所有要保存到数据库的输入。

【讨论】:

以上是关于从 AJAX 获取 PHP 中的 SQL 时不让用户访问其他用户信息的好习惯的主要内容,如果未能解决你的问题,请参考以下文章

获取 ajax 请求以更新 SQL 表中的列

Ajax 仅适用于第一次从 php 中的 while 循环中获取数据

尝试从 AJAX 中的文本框获取价值并将其发送到新页面

PHP $connection->query($sql) 在 AJAX 调用期间从 PHP 脚本调用时返回 FALSE? [复制]

从 PHP foreach 循环中获取 Ajax 变量(第二部分)

[我想使用foreach循环php中的ajax来获取被点击行的UID,但获取所有UID