确保webapp用户只能将记录添加到他们拥有的数据库中

时间:2015-02-25 14:42:22

标签: mysql database security web-applications relational-database

我正在开发一个非常简单的Web应用程序,用于在MySQL数据库中将他们自己的表中的教师,学生和家庭作业记录下来。将学生分配给教师,并记录学生已完成的家庭作业任务。

教师可以选择某项作业任务,然后选择其中一名学生完成作业。提交此项将记录学生已完成的作业。

表格如下:

教师

--------------------------
|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,然后为他们不拥有的学生保存完成作业。

如何最好避免这种情况?有没有比先前做出选择以检查学生是否属于老师更好的选择?

1 个答案:

答案 0 :(得分:0)

在您的会话中,您将存储教师的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不匹配,将插入零记录。

如果特定学生和教师LIMIT 1中可能存在重复记录,请将student添加到select子句中。