防止使用PHP会话进行字段编辑

防止使用PHP会话进行字段编辑,php,authorization,access-control,Php,Authorization,Access Control,使用PHP会话变量防止用户编辑隐藏/输入字段值是否是一个好主意/好做法?例如,假设我有以下字段: <input type="hidden" object_id="1" /> <input type="text" object_id="2" /> etc... 等 我需要在前端有object\u id,这样我就可以知道当用户提交时需要操作哪些数据库条目(前提是他们有权对数据进行操作)。$\u SESSION变量看起来类似于[obj\u id=1,obj\u id=2]

使用PHP会话变量防止用户编辑隐藏/输入字段值是否是一个好主意/好做法?例如,假设我有以下字段:

<input type="hidden" object_id="1" />
<input type="text" object_id="2" />
etc...
我需要在前端有
object\u id
,这样我就可以知道当用户提交时需要操作哪些数据库条目(前提是他们有权对数据进行操作)。
$\u SESSION
变量看起来类似于
[obj\u id=1,obj\u id=2]
。授权过程的一部分确保用户尝试执行操作的所有条目都存在于会话中。如果存在一些差异(例如,带有
对象的元素\u id=“3”
),则用户未经授权


是否有更广泛接受的解决方案或类似的解决方案通常就足够了?

通常,您仍然需要信任最终用户为您提供要修改的正确数据。在该上下文中唯一可以验证的是,提供的值看起来像是要插入数据库的有效数据,这通常是数据库作业本身,因为要确定的有效数据是数据库表的状态

有很多方法可以做到这一点。除非我对您正在尝试做的事情了解更多,否则我无法提供一个合理详细的解决方案


祝你好运

如果存储在会话中,为什么还要麻烦存储在隐藏字段中?如果不允许他们修改所讨论的元素,为什么还要麻烦以允许更改的形式存储呢?我认为这通常是一种不好的做法。您可能应该重新考虑您的应用程序流程。^我同意会话中已经存在的内容不属于隐藏字段。为什么?如果您依赖GET或POST VAR而不是会话进行这些操作,那么您正在制造一场安全灾难?如果为了获得预期的功能,您必须跳转,那么您很可能试图将状态存储在它不属于的位置。用户会话应包含用户会话数据。没有更多,也没有更少。@steve大多数字段都应该由最终用户编辑。回想起来,我也许可以去掉隐藏的字段。您的参数是否仍适用于用户要编辑的字段?如果是这样的话,我会重新思考事情是如何运作的。如果它们被认为是由最终用户编辑的,那么post就可以了。数据有效性应尽可能由表约束确定。如果你不必相信用户,看在上帝的份上,就不要相信我将在这里发表评论以包含我们的对话,因为我还有一件事要问。如果用户输入的所有数据都是有效的,但用户编辑了
object\u id
,因此他们接触了一个数据库条目,他们有权修改该条目,但在这种情况下不应该修改该条目,那么情况又如何呢?@mcon这需要对软件设计本身进行深入的讨论。我会很高兴有它,但评论不是地方:)同意;评论不是进行此类讨论的场所。我决定让我的授权过程更加彻底,这样我就可以避免所有的会议。我接受你的建议和建议。谢谢@麦肯:听起来很明智。如果您让我参加一个聊天会话,我将向您展示我在php中使用的许多巧妙的技巧,这些技巧在保持状态的同时仍然可以降低代码复杂性。Php比人们认为的强大。