确保 webapp 用户只能将记录添加到他们拥有的数据库中
Ensuring a webapp user can only add records to a database that they own
我正在开发一个非常简单的 Web 应用程序,用于在 MySQL 数据库中各自 table 记录教师、学生和家庭作业。一个学生被分配给一个老师,table 记录哪些学生完成了哪些家庭作业。
老师可以 select 完成某项家庭作业任务,然后选择一名学生完成该任务。提交这将记录学生已完成作业。
table 看起来如下:
老师
--------------------------
|teacher_id | name |
--------------------------
| | |
学生
--------------------------
|student_id | teacher_fk |
--------------------------
| | |
作业
--------------------------
|homework_id | details |
--------------------------
| | |
Homework_completion
-------------------------------------------
|completion_id | student_fk | homework_fk |
-------------------------------------------
| | | |
当教师选择作业任务和学生并将其提交为已完成时,MySQL INSERT 如下使用
INSERT INTO homework_completion VALUES 'student_id', 'homework_id'
这两个值都是从用户提交的表单中检索的。如果用户要使用浏览器开发人员工具,他们可以更改表单中的 student_id,然后为他们不 'own'.
的学生保存作业完成情况
如何最好地避免这种情况?有什么比事先做 select 更好的选择来检查学生是否属于老师?
在您的会话中,您将存储教师的 ID(登录用户)。
执行插入时,可以使用INSERT INTO ... SELECT
强制执行规则:
INSERT INTO homework_completion (student_fk, homework_fk)
SELECT s.student_id, :homework_id
FROM student s
WHERE s.student_id = :student_id
AND s.teacher_fk = :teacher_id
如果学生的教师 ID 不匹配,将插入零条记录。
如果特定学生和教师在 student
中有可能出现重复记录,请将 LIMIT 1
添加到 select 子句。
我正在开发一个非常简单的 Web 应用程序,用于在 MySQL 数据库中各自 table 记录教师、学生和家庭作业。一个学生被分配给一个老师,table 记录哪些学生完成了哪些家庭作业。
老师可以 select 完成某项家庭作业任务,然后选择一名学生完成该任务。提交这将记录学生已完成作业。
table 看起来如下:
老师
--------------------------
|teacher_id | name |
--------------------------
| | |
学生
--------------------------
|student_id | teacher_fk |
--------------------------
| | |
作业
--------------------------
|homework_id | details |
--------------------------
| | |
Homework_completion
-------------------------------------------
|completion_id | student_fk | homework_fk |
-------------------------------------------
| | | |
当教师选择作业任务和学生并将其提交为已完成时,MySQL INSERT 如下使用
INSERT INTO homework_completion VALUES 'student_id', 'homework_id'
这两个值都是从用户提交的表单中检索的。如果用户要使用浏览器开发人员工具,他们可以更改表单中的 student_id,然后为他们不 'own'.
的学生保存作业完成情况如何最好地避免这种情况?有什么比事先做 select 更好的选择来检查学生是否属于老师?
在您的会话中,您将存储教师的 ID(登录用户)。
执行插入时,可以使用INSERT INTO ... SELECT
强制执行规则:
INSERT INTO homework_completion (student_fk, homework_fk)
SELECT s.student_id, :homework_id
FROM student s
WHERE s.student_id = :student_id
AND s.teacher_fk = :teacher_id
如果学生的教师 ID 不匹配,将插入零条记录。
如果特定学生和教师在 student
中有可能出现重复记录,请将 LIMIT 1
添加到 select 子句。