0

我担心我在 Rails 应用程序中实现某个功能的安全性。

我有两个模型,评估和评估尝试。

Assessments 显示视图显示一个表单(它是一个多项选择测试表单),但数据被发送到 AssessmentAttempts 控制器而不是 Assessments,它记录了 user_id、assessment_id 和用户在测试中的选择。

当前用户的 ID 未作为表单的一部分提交,但目前我将assessment_id 作为隐藏字段提交(取自 URL,例如 /assessments/1)。

这不应被修改:用户不应该能够更改该值,否则他们的选择将与不同的测试问题相关联。

有没有比使用隐藏字段更好的方法来将该assessment_id 放入AssessmentAttempts 控制器?

谢谢!

4

1 回答 1

1

您可以在数据库中为 AssessmentAttempt 创建一个初始条目。为 AssessmentAttempt 提供一个唯一的令牌列,并使用它来验证用户的测试作为表单中的隐藏字段。

例子:

token = SecureRandom.base64.tr("+/", "-_")

好消息:您有不完整的尝试历史和一些额外的跨站点保护

坏消息:数据库中的空行。

于 2012-11-14T14:15:33.343 回答