URl中的PHP/MySQL加密ID

URl中的PHP/MySQL加密ID,php,mysql,Php,Mysql,我是一个新手,我刚刚建立了一个积垢系统,但它一点也不安全。编辑页面的URL中有ID号,用户只需随机键入ID即可访问数据库中的其他记录 我更新了代码,根据登录id保存了记录,但URL中的id标记看起来仍然不专业。您必须在所有SQL查询中添加用户/记录所有者唯一标识,通常: $query = "SELECT * FROM table WHERE id = 1 AND user_id = 2"; 通过这种方法,您可以确保用户只访问他的记录。登录用户的Id可以放在会话中的某个位置 不建议隐藏或散列I

我是一个新手,我刚刚建立了一个积垢系统,但它一点也不安全。编辑页面的URL中有ID号,用户只需随机键入ID即可访问数据库中的其他记录


我更新了代码,根据登录id保存了记录,但URL中的id标记看起来仍然不专业。

您必须在所有SQL查询中添加用户/记录所有者唯一标识,通常:

$query = "SELECT * FROM table WHERE id = 1 AND user_id = 2";
通过这种方法,您可以确保用户只访问他的记录。登录用户的Id可以放在
会话中的某个位置


不建议隐藏或散列ID,这是一种反模式。

Base 64编码不是加密。如果你想隐藏id,你需要生成一个令牌(一个salted散列,或者更好的是,一个UUID),你可以将它与记录的其他信息一起存储在数据库中。这与安全性无关,这是开发架构。首先请记住,如果我是授权访问ID为1、2、3、4的记录的用户,那么我可以通过URI手动切换页面并访问所有授权ID的数据并不重要。因此,如果您的用户被授权访问所有记录ID以编辑记录,则这并不重要。您应该在页面顶部检查(中间件)请求的ID是否授权给当前用户。此外,最重要的事情(如@Shailesh所说)是检查权限。如果用户知道项目id,如果您阻止未经授权的访问,谁会在意呢?如果你所做的只是掩盖信息,那就称之为“保密”,这不是一个好主意。您需要检查用户查看/更新/删除数据的权限,无论他们提供的是什么项目id。如果用户没有权限访问数据,例如id为7,即example_edit.php?id=7,则您的代码首先检查(在顶部)是否允许用户访问此页面。@Ed Cottrell是的,你是对的。对的,但如果他在数据表中没有用户id,只需创建一个新表,您可以在其中放置记录id和用户id关系并进行动态检查。是的,当然,具体实现取决于他的用例,这仅用于演示目的。
$secure_id = $_GET['id'];
$decryped_id = base64_decode($secure_id);
$query = "SELECT * FROM table WHERE id = 1 AND user_id = 2";