我担心在我的rails应用程序中实现功能的安全性。
我有两个模型,评估和评估尝试。
"评估显示"视图显示一个窗体(它是多项选择测试窗体),但数据将发送到 AssessmentTry 控制器,而不是"评估",后者记录测试中的user_id、assessment_id和用户选择。
当前用户的 ID 不作为表单的一部分提交,但目前我正在将assessment_id作为隐藏字段提交(取自 URL,例如/assessments/1)。
不应修改:用户不应能够更改该值,否则他们的选择将与不同的测试问题相关联。
有没有比使用隐藏字段更好的方法将该assessment_id放入评估尝试控制器?
谢谢!
您可以在数据库中为 AssessmentTry 创建一个初始条目。 为 AssessmentTry 提供一个唯一的标记列,并使用它来验证用户的测试作为表单中的隐藏字段。
例:
token = SecureRandom.base64.tr("+/", "-_")
好消息:您有未完成尝试的历史和一些额外的跨站点保护
坏消息:数据库中的空行。