【问题标题】:Database security issue with Rails using select fieldRails 使用选择字段的数据库安全问题
【发布时间】:2012-12-29 06:33:55
【问题描述】:

作为一个偏执的入门级开发人员,我想知道用户是否可以使用某种查询通过带有选择字段的表单将数据插入数据库。

更具体地说,让我们在我的数据库中说我有一个性别列(数据类型文本),在我的表单中我使用选择标签并传入 2 个选项男性和女性。尽管在 html 中用户只有 2 个选项可供选择,但 db 不知道这一点。性别栏几乎可以接受任何内容。我只是想知道讨厌的用户是否可以忽略选择选项并以某种方式在“性别”列中插入一个愚蠢的答案?如果是这样,我该如何保护。

【问题讨论】:

标签: ruby-on-rails database ruby-on-rails-3 ruby-on-rails-3.2 validation


【解决方案1】:

您在这里谈论的事情是在将数据输入数据库之前需要进行验证。无效数据可能来自任何地方(直接来自控制器或来自 GUI),模型负责在数据提交到数据库之前对其进行验证。

浏览这些链接。

http://api.rubyonrails.org/classes/ActiveRecord/Validations.html http://guides.rubyonrails.org/active_record_validations_callbacks.html

【讨论】:

  • 对。它很容易验证存在或格式或长度,我已经实现了。我将如何验证选择字段中的选项?在 Gender 的情况下,也许我可以插入一个字符串 == "Male" || 的验证。 “女性”或类似的东西。但是让我们说如果有一个城市选项,我列出所有城市是不切实际的。有没有更好的方法来做到这一点?
  • 好一个。这些验证必须在控制器端完成。例如,控制器知道它已经发送到列表框的数据列表,当数据来自 GUI 时,它应该对它用来填充的列表以及从图形用户界面。这将确保用户输入始终有效。
  • 好的,有道理。您如何看待这种方法。在模型端使用“验证包含”方法。那是否适用。 stackoverflow.com/questions/8582967/…
  • 是的。只要您的集合足够小,就像您的性别示例一样。如果您的父集很大(例如城市),您不能将所有内容都包含在 VALID_STATES 中,而是必须使用一个实例变量来跟踪您首先用来加载列表框的城市。
猜你喜欢
  • 2012-05-08
  • 2012-03-31
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多