gpt4 book ai didi

php - 阻止web 'User A'通过查询查看MySQL中的 'User B'记录?

转载 作者:行者123 更新时间:2023-11-30 01:02:08 25 4
gpt4 key购买 nike

对于 MySQL 来说还是个新手。

我有以下名为 secrets 的 MySQL 表:

+----+--------+----------------+--------------------+
| id | userid | name | secret_ingredients |
+----+--------+----------------+--------------------+
| 72 | 1 | Nigella Lawson | Pixie dust |
| 99 | 2 | Delia Smith | Ground beatles |
| 32 | 3 | Anjum Anand | Minced fairies |
+----+--------+----------------+--------------------+

我还有一个 HTML 表,根据每个登录用户的 SESSIONID(即他们的数据库 userid)列出了每个登录用户的所有 secret 成分。

该表有一个表单按钮,可将显示的行 id 发布到 php 文件,以在新(详细信息)页面上显示所有行数据。

我在 php 文件中使用了以下查询来提取数据:

$id = $_POST["secret_id"];

$userid = $_SESSION['uid'];

{

$result = mysql_query("SELECT * FROM secrets WHERE id=" .$id );
$data = mysql_fetch_array($result);

$secretstuff = $data['secret_ingredients'];
$name = $data['name'];
}

上述问题是用户可以更改发布到 php 文件的 'secret_id' 值,从而查看其他用户的 secret 成分。

如何防止这种情况发生?如何构造一个查询,仅当 userid 与当前 SESSION ID 匹配时才获取成分 id

我应该在 userid=".$userid 处获取所有记录,然后从获取的数组中获取 Web 选择的 $id 变量吗?

或者我的做法是错误的吗?

最佳答案

Should I fetch all records WHERE userid=" .$userid and then fetch the web selected $id variable from the fetched array?

是的,您还应该检查userid以及id

修改您的查询..

$result = mysql_query("SELECT * FROM secrets WHERE id=" .$id ." AND userid = ". $userid);
if (!$result) {
// redirect to the previous page (list page) with the message
header('location: list.php?msg=Invalid request');
die();
}

请注意,如果用户尝试破解表单并更改 id 来检查其他人的数据,您需要将它们重定向回来,因为现在查询将返回 null/空记录集..

警告: mysql* 函数已弃用

检查Why shouldn't I use mysql_* functions in PHP?

关于php - 阻止web 'User A'通过查询查看MySQL中的 'User B'记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027879/

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