Как обрабатывать злонамеренно большой ввод в текстовой области Rails

У меня есть textarea в одной из моих форм Rails, которая принимает произвольные данные от пользователя.

На стороне клиента, я могу установить maxlength: 500 в форме, чтобы предотвратить злонамеренное вставление чрезмерно длинного ввода.

На стороне сервера, как я могу реализовать эту же защиту? Кто-то может обойти мою форму, отключив это свойство или POST прямо к моей конечной точке с невероятно длинным параметром textarea. Я предполагаю, что такая атака приведет к сбою моего сервера, когда он попытается проанализировать большой текст.

Я всегда могу проверить длину в моем контроллере (например, if params[:input].length < 500...) но к тому времени params[] уже установлен и должен был проанализировать этот вход.

Rails позаботится о такой атаке? Или я могу / должен что-то сделать?

Спасибо!

2 ответа

Вы можете просто добавить проверку модели, предполагая, что вы сохраняете свое значение с помощью активной записи.

validates_length_of :input, :minimum => 5, :maximum => 500, :allow_blank => true

Сервер будет отклонен, если длина превышает длину. Или вы можете применить JavaScript перед публикацией формы, которая проверяет длину текстовой области, дайте мне знать, если вам нужна дополнительная помощь или объяснение.

Давайте сначала на секунду положим здравый смысл и законы природы. Я думаю, вам лучше не беспокоиться об этом, так как для того, чтобы пользователь отправлял достаточно данных, чтобы замедлить работу сервера приложений, ему придется ждать целую вечность для загрузки этих данных (на самом деле, до вашего сервера). Поэтому, если им удастся отправить около 500 гигабайт, веб-сервер, вероятно, не примет это / ошибка завершится / процесс умрет и будет перезапущен. Таким образом, я был бы более обеспокоен тем, что 1000 пользователей отправляют небольшие порции одновременно, скажем, 1 мегабайт в секунду при каждом подключении... это приведет к тому, что веб-сервер вызовет дополнительные процессы и не хватит ОЗУ / ЦП, так что это будет более эффективная атака вместо того, чтобы посылать большой кусок за один выстрел.

Но если вы чувствуете, что есть вероятность того, что ваше приложение будет подвержено такого рода злонамеренным атакам пользователей /DoS, я бы посоветовал взглянуть на план Cloudflare.

Другие вопросы по тегам