【问题标题】:PHP Session and restricted mysql AccessPHP Session 和限制 mysql 访问
【发布时间】:2023-03-05 12:03:02
【问题描述】:

我在 Sessions 中使用用户管理脚本

会话对象 $loggedInUser 包含以下属性:

$loggedInUser->email
$loggedInUser->user_id 
$loggedInUser->hash_pw 
$loggedInUser->clean_username

用户可以通过 POST 从 'form.php' 提交数据到 处理脚本'process.php'

'form.php' 可以访问前面提到的 Session 对象。 这是当前在发送表单时提交的 Cookie:

PHPSESSID=7ec81164c9fb2cdc4c6f47a00bc2ae50 

问题:

如何保护 'process.php' 以确保只允许登录用户提交数据?

*据我所知,'process.php' 只能由我的服务器而不是用户访问,因此我必须通过 Cookie、Get 或 Post 提交会话对象都很容易被篡改,对吗?*

如果合适,您会以何种方式使用提交的 Cookie 或检查验证?

ATM 很容易,知道 'process.php' 的路径,在没有登录状态的情况下“伪造”提交。

感谢经验丰富的程序员的一些智慧之言 :)。

【问题讨论】:

  • 是否建议将表单发送到 PHP_SELF,在那里我可以将 INSERT 包装到基于 SESSIONS 的条件中?

标签: php mysql security session cookies


【解决方案1】:

$loggedInUser 存储在会话中并在process.php 中检查$_SESSION['loggedInUser']->isLoggedIn()(或者您通常可以确定用户是否已登录)。

攻击者可以欺骗 session_id,但不能欺骗其内容。 https://www.owasp.org/index.php/Session_fixation

【讨论】:

  • 但是您可能不应该将密码哈希存储在会话中,只存储用户名/用户 ID 等良性数据。
  • 但是 process.php 中的会话对象如何可用?用户没有用他的浏览器访问这个文件,请求是从我服务器的文件 form.php 发出的。我在这里理解有什么问题吗?我认为使完整 SESSION 对象可用的唯一方法是通过 COOKIE、POST、GET 或将表单发​​送给自身!?
  • @Email 你说用户提交form.php到process.php。我假设你有一个带有action="process.php" 的表格。将$_SESSION 转储到process.php 中并自己找出来。
  • @prodigitalson thx 4 提示,我只是在学习,您的建议对我有很大帮助。
  • @Mike 是的,这是正确的。是否 process.php 也可以访问 SESSION 对象(不是 Cookie/GET/POST 发送)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多