通常的做法是拒绝对rails应用程序的“恶意”用户输入

时间:2012-01-11 11:05:41

标签: ruby-on-rails ruby security url validation

我正在使用Ruby on Rails 3.1.0,我想知道防止在数据库中存储“恶意”值的常见做法。

例如,我有一个数据库表列,用于存储URL。通过验证(只是长度检查)的用户可以提交http://<script>alert('hello!');</script>之类的网址。 我不允许存储上述链接...... 我该如何制作?

3 个答案:

答案 0 :(得分:3)

正确的做法是使用URI来解析假定的URL,然后检查每个组件:

validate :url_check

def url_check
    u = URI.parse(self.url)
    # check u.scheme, u.userinfo, etc. and  call errors.add(:url, '...')
    # if something is invalid.
rescue URI::InvalidURIError
    errors.add(:url, 'You are being naughty.')
end

答案 1 :(得分:1)

虽然这些链接在数据库中,但它们没有任何危害。尝试渲染它们时可能会出现问题。 Rails在逃避你输出的大部分内容方面做得很好(我不敢说“一切”,因为我不确定)。

你可以更加确定并自己逃避一个字符串:

CGI.escape your_link_url

链接:CGI.escape

答案 2 :(得分:0)

您可以使用正则表达式验证它是否为有效的网址,而不包含&#39;&lt;&#;,&#39;&gt;&#39;网址。 HTML将其编码在适用的位置。