如何从后端限制输入字符

时间:2019-07-04 12:09:26

标签: ruby-on-rails security

我已经在RoR中发布了我的第一个网站,但遭到攻击...

我的网站是一个简单的论坛,您可以在其中发布带有标题和内容的文章。

我认为标题中的字符数限制为150个

<%= form.text_field :title, :maxlength => 150, class: 'title_input' %>

,然后在控制器中

def create
  if (params[:article][:title].length > 150)
      render 'new'
  end
  @article = Article.new(params[:id])
  if @article.save
    redirect_to article_path
  else
    render 'new'
  end
end

但这似乎不起作用,用户向我发送了75000个字符的标题,而它们都是表情符号

我正在使用Recaptcha来使垃圾邮件的重要性降低,但是像这样的10条帖子足以使我的应用程序瘫痪。

我不能禁止他,因为他一直在使用新IP并如此快速地更改它。

您知道我该如何阻止吗?

谢谢

编辑

我在这样的模型中使用验证器解决了

validates :title, presence: true, length: { in: 1..100 }

感谢Sampat

2 个答案:

答案 0 :(得分:0)

如果您使用默认的rails行为,那么您使用的参数应该为空,因为正确的哈希应该类似于params[:article][:title],或者您使用的是强参数:article_params[:title]

您是否真的检查过params[:title]是否包含上述信息?我建议您调试如何将信息发送到服务器,然后在正确的参数密钥中添加相应的限制

答案 1 :(得分:0)

将代码添加到模型中。它将限制最大限制

class Article < ApplicationRecord
  validates :title, length: { maximum: 500,
    too_long: "%{count} characters is the maximum allowed" }
end