确保 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 子句。