【问题标题】:session id as foreign key (security?) [duplicate]会话ID作为外键(安全?)[重复]
【发布时间】:2020-05-23 14:37:33
【问题描述】:

我想使用会话 ID 来更新我的数据库中的特定条目(作为外键)。

会话 ID:

$_SESSION['id'] = '1';

PDO

$sql = "UPDATE table_user set f_name = :f_name, l_name = :l_name where id = :id and fk_user = {$_SESSION['id']}";

这种方法可以安全操作吗?这对我来说似乎有点弱,但我从未使用会话 ID 作为外键。任何建议都非常受欢迎。 如果这个问题不好,我很抱歉。

【问题讨论】:

  • 这样做没有问题。但是当谈到安全措施时,JSON Web Token 是我更好的方法。因为你需要在服务器端给用户授权。

标签: php security session pdo


【解决方案1】:

它不安全。

为什么你对其他值使用参数而不使用参数作为会话ID?

$sql = "UPDATE table_user set f_name = :f_name, l_name = :l_name where id = :id and fk_user = :session_id";

【讨论】:

  • 因为我循环通过 $_POST 并且 $_SESSION 显然不在那里。但是如何知道哪个 session_id 与哪个用户连接呢?还是你的:session_id 是 1?
  • 我想你应该研究一下会话在 php 中是如何工作的
【解决方案2】:

$_SESSION['id'] 只是将新属性 id 设置为提供的值,您没有使用会话 ID 本身。如果要获取会话 ID,只需使用session_id()

我假设您希望此 ID 可用于多个页面,这就是您将其保存在会话中的原因,这没有任何问题。

【讨论】:

  • 这正是我想要的:)。但是我怎么知道哪个会话 id 与哪个用户连接呢?
  • 每个用户都有自己的会话数据;当您调用session_start() 时,它会创建会话信息。会话标识符是在浏览器上的用户 cookie 中设置的,这就是 PHP 知道哪个会话是针对哪个用户的方式
  • 但是我不能像fk_user = :session_id那样只使用语句中的id,对吧?你有什么办法可以解决这个问题吗?
  • 这真的取决于你如何设置。您可以在创建会话时或用户登录时或您想要的任何地方保存该 ID。设置会话数据后,您可以从任何其他请求中读取它针对该特定用户
  • 好的,所以我必须将其设置为可以用作外键吗?有链接之类的吗?因为我仍然不明白 4372297c77c5c0b897be21adbf789e6f1 如何作为 1 的外键工作。
猜你喜欢
  • 1970-01-01
  • 2015-10-23
  • 2016-09-12
  • 1970-01-01
  • 2013-04-05
  • 2013-05-20
  • 2013-02-03
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多