我的一个Rails表单中有一个textarea
,它接受来自用户的自由格式输入。
客户端,我可以在表单上设置maxlength: 500
,以防止有人恶意粘贴过长的输入。
服务器端,我如何实施同样的保护措施?有人可以通过使用非常长的textarea参数禁用该属性或POST
直接到我的端点来绕过我的表单。我假设这样的攻击会在我尝试解析大文本时关闭我的服务器。
我总是可以在我的控制器中检查长度(例如if params[:input].length < 500...
),但到那时params[]
已经设置并且必须解析该输入。
Rails会处理这种类型的攻击吗?或者我能做什么/应该做什么?
谢谢!
答案 0 :(得分:2)
您可以简单地添加模型验证,假设您通过活动记录存储您的值。
validates_length_of :input, :minimum => 5, :maximum => 500, :allow_blank => true
如果长度超过长度,服务器将拒绝。或者您可以在发布检查textarea长度的表单之前应用JavaScript,如果您需要进一步的帮助或解释,请告诉我们。
答案 1 :(得分:1)
让我们把常识和自然规律放在第一位。我认为你最好不要担心这个问题因为用户发送enogh数据来减慢你的应用服务器速度,他们将不得不等待很长时间才能上传这些数据(实际到达你的服务器)。因此,如果他们确实设法发送了一些500gig,那么Web服务器可能不会接受它/错误输出/进程将死亡并重新启动。所以我会更关心1000个用户同时发送小块,比如每个连接每秒1兆...这会导致Web服务器产生额外的进程并耗尽RAM / CPU所以它将是一个更高效的攻击,而不是一次性发送大块。
但是如果你觉得你的应用有可能接触到这种恶意用户/ DoS攻击,那么我建议你看一下Cloudflare计划。