应该在更改数据库的操作发生之前完成断言或检查吗?
should asserts or checks be completed before an action takes place to change the database?
是否应该在读取/写入实际数据之前检查用户对数据库中记录的读取/写入?或者可以在同一个查询中全部应用它吗?
即。
assertUserCanViewClassRoom($classroomId, $userId, $userRole);
assertUserCanRemoveStudent($classroomId, $userId, $userRole);
或者是否应该在操作的 sql 中完成检查?
viewClassRoom($classroomId, $userId, $userRole);
removeStudent($classroomId, $userId, $userRole);
我太冗长了(也就是罗嗦)
现在我打算修改所有查询,只是为了确保允许执行这些操作的用户这样做,用户可以访问他们可能创建的 Table B 中的读取/更新记录或者他们的角色允许他们忽略属于较小用户(又名管理员、教师、学生)的记录
目前该进程允许任何用户修改记录(糟糕的做法)。 A 老师可以查看B 老师的信息,并可以通过在课堂上添加/删除学生来修改信息。理想情况下,对教师 ID 的简单检查甚至可以防止此操作发生。
我是否应该在访问该记录之前进行检查以验证 X 老师是否有权在 Table B 中记录 id=Y。这听起来不错,但真的如此吗?我是否在先检查而不是读/写数据?
我认为这将是一个简单的查询语句更改,它 加入 基于 用户 id 或 的表正在修改的记录的用户角色权限。
我被建议做一个预检查,这听起来不错,但现在我正在对数据库进行潜在的额外流量以完成我认为是简单的读取或写入事务。我有点像通过 sql 断言或检查来验证用户是否可以执行任务而不是执行任务。
这是断言/权限检查的标准做法吗?首先检查是否有更新、插入或删除的简单功能? (请注意 Delete 从未真正使用过)如果不是这种情况,什么是更好的建议?
附加信息系统设置为用户当前可以读取他们自己的数据,但通过一些简单的修改,用户实际上可以读取任何人的数据。
项目 PHP MySQL 后端全部面向对象
如果您很谨慎,请始终先检查,尤其是当您对您的消毒检查不太有信心时。
所以,你会做一个简单的
SELECT is_admin FROM users WHERE user = '{$userid}';
等如果 is_admin 为真,则继续您的 select/update/insert 脚本。如果不是,拒绝访问。
是否应该在读取/写入实际数据之前检查用户对数据库中记录的读取/写入?或者可以在同一个查询中全部应用它吗?
即。
assertUserCanViewClassRoom($classroomId, $userId, $userRole);
assertUserCanRemoveStudent($classroomId, $userId, $userRole);
或者是否应该在操作的 sql 中完成检查?
viewClassRoom($classroomId, $userId, $userRole);
removeStudent($classroomId, $userId, $userRole);
我太冗长了(也就是罗嗦)
现在我打算修改所有查询,只是为了确保允许执行这些操作的用户这样做,用户可以访问他们可能创建的 Table B 中的读取/更新记录或者他们的角色允许他们忽略属于较小用户(又名管理员、教师、学生)的记录
目前该进程允许任何用户修改记录(糟糕的做法)。 A 老师可以查看B 老师的信息,并可以通过在课堂上添加/删除学生来修改信息。理想情况下,对教师 ID 的简单检查甚至可以防止此操作发生。
我是否应该在访问该记录之前进行检查以验证 X 老师是否有权在 Table B 中记录 id=Y。这听起来不错,但真的如此吗?我是否在先检查而不是读/写数据?
我认为这将是一个简单的查询语句更改,它 加入 基于 用户 id 或 的表正在修改的记录的用户角色权限。
我被建议做一个预检查,这听起来不错,但现在我正在对数据库进行潜在的额外流量以完成我认为是简单的读取或写入事务。我有点像通过 sql 断言或检查来验证用户是否可以执行任务而不是执行任务。
这是断言/权限检查的标准做法吗?首先检查是否有更新、插入或删除的简单功能? (请注意 Delete 从未真正使用过)如果不是这种情况,什么是更好的建议?
附加信息系统设置为用户当前可以读取他们自己的数据,但通过一些简单的修改,用户实际上可以读取任何人的数据。
项目 PHP MySQL 后端全部面向对象
如果您很谨慎,请始终先检查,尤其是当您对您的消毒检查不太有信心时。
所以,你会做一个简单的
SELECT is_admin FROM users WHERE user = '{$userid}';
等如果 is_admin 为真,则继续您的 select/update/insert 脚本。如果不是,拒绝访问。