2012-02-23 75 views
1

我使用一个用户管理脚本会话PHP会话和限制MySQL访问

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

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

用户能够从“form.php的”提交数据通过POST到 处理脚本'process.php'

'form.php的'有权访问前面提到的Session对象。 这是目前在提交的Cookie发送形式:

PHPSESSID=7ec81164c9fb2cdc4c6f47a00bc2ae50 

问:

如何确保“process.php”到savely只允许登录用户提交数据?

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

如果合适的话,你会使用提交的Cookie或检查验证?

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

感谢您经验丰富的程序员的智慧:)。

+0

将表单发送到PHP_SELF,我可以将INSERT包装到基于SESSIONS的条件中吗? – Email 2012-02-23 23:37:52

回答

2

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

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

+1

但是,你可能不应该在会话中存储密码哈希,只有像用户名/用户ID这样的良性数据。 – prodigitalson 2012-02-23 23:53:29

+0

但是process.php中的会话对象如何提供?用户没有用他的浏览器访问这个文件,请求是从我的服务器的文件form.php中获得的。我在这里理解错误吗?我认为让SESSIONobject成为可用的唯一方法是通过COOKIE,POST,GET或将表单发​​送给自己! – Email 2012-02-23 23:56:55

+0

@Email你说用户提交form.php到process.php。我认为你有一个形式与'action =“process.php”'。在process.php中转储'$ _SESSION'并找出你自己。 – 2012-02-23 23:58:32