我的数据库中有以下表格:
- 学生(student_id,电子邮件,姓名,......)
- 课程(course_id,course_name,...)
- 注册(student_id,course_id,marks,...)
我想实现此功能:
- 当管理员要搜索特定城市的所有学生的列表时, 列表显示为HTML表。
醇>
这可以通过查询学生表来实现。
- 当管理员点击任何一行时(从我们在1中显示的表中) 然后管理员应该看到学生注册的所有课程的列表 英寸
醇>
我的问题是我应该如何实现这个?
我可以想到以下方式:
方式1:
https://stackoverflow.com/a/45135144/3494107
我需要有一些方法来确定哪个行管理员已经点击了,为此我可以将结果中的student_id传递给1(所有学生的显示列表)但是由于student_id没有向管理员传达任何关于学生的信息我可以只需将其隐藏在data-*
或<tr>
的{{1}}属性中,以便我可以使用它来识别管理员点击的行。我的一些朋友告诉我,我不应该公开代理密钥,这对安全性有害。那么有什么方法可以将这个student_id与表格行关联但是向用户隐藏,或者可以将代理键内容暴露给用户?
方式2:
我可以在DB中创建一个包含来自特定城市的所有学生的临时表,并为其分配行ID。现在结果我可以将每行的行ID添加到data- *属性中。此行ID不会传达有关什么是实际student_id的任何信息,我可以使用此行ID查询临时表以获取可用于在注册表中搜索的实际student_id。现在,当用户离开当前页面时,我需要删除此临时表(转到其他功能),现在我应该如何检测用户何时离开此页面?
我想了解如果我向用户公开代理键,我可以拥有哪些安全问题?
答案 0 :(得分:1)
如果您公开student_id
,则不存在任何安全问题,但从业务角度来看,这是不可接受的。
如果这些表仅由管理员查看,则无论如何都不是问题。
如果客人甚至可以查看这些内容,那么最好不要公开student_id
。不是为了数据库的安全性,而是为了您的业务的安全性。它可能会暴露你的力量和弱点。
您可以改用student_registration_no
。它可能很慢,考虑到VARCHAR
条目,但不是人类可检测到的。