Comments 20
Скорее DoS, нежели DDoS. Все таки полезная нагрузка будет направлена самим на себя?
Или я неправильно понял? :X
Или я неправильно понял? :X
+3
немного попутал с определениями да. ну можно и distributed сделать для пущего эффекта
-1
И всеже это не самим на себя. Просто достаточно 1 компьютера чтобы постепенно забить символами всю память
Или я неправильно понял? )
Или я неправильно понял? )
-1
Сколько же потребуется сгенерировать трафика, чтобы забить память? Тут эффект от затраченных ресурсов на обработку запроса будет выше, чем от потерянной памяти на этих символах.
Ну вылез воркер по памяти за дозволенный порог — перезапустили его и нет проблем.
Можно, конечно, наблюдать за
Какой-либо ошибки здесь не вижу — все так, как и должно быть.
Для ruby- разработчика неплохое напоминание того, что не нужно без необходимости плодить неконтролируемые символы, когда можно обойтись строкой.
Ну вылез воркер по памяти за дозволенный порог — перезапустили его и нет проблем.
Можно, конечно, наблюдать за
Symbol.all_symbols
, но оно того не стоит.Какой-либо ошибки здесь не вижу — все так, как и должно быть.
Для ruby- разработчика неплохое напоминание того, что не нужно без необходимости плодить неконтролируемые символы, когда можно обойтись строкой.
+1
Разве в 4 рельсах не выпилили сахар вроде
Ещё непонятно зачем использовать
Ну а вообще кто вам мешает написать такое:
или так
find_by
? Надо будет использовать where ручками.Ещё непонятно зачем использовать
Model.find_by_id()
кода Model.find()
и так по id ищет? Или это просто пример для наглядности?Ну а вообще кто вам мешает написать такое:
Model.find(:all, conditions: ["id LIKE ?", "#{params[:id]}"])
или так
Model.where("id = ?", params[:id])
0
это первая половина поста. Там дальше написано
Весь этот SQL Injection CVE не стоит выеденного яйца! И ради чего пост? DoS!
Весь этот SQL Injection CVE не стоит выеденного яйца! И ради чего пост? DoS!
-1
Так я к тому и веду, если запрос будет
У меня ничего не происходит
all преобразуется в строку и возвращается пустой масив так как ничего не найдёно.
Model.where("id = ?", params[:id])
и к нам придет symbol :all что то произойдет?У меня ничего не происходит
User Load (0.3ms) SELECT "users".* FROM "users" WHERE (id = 'all')
all преобразуется в строку и возвращается пустой масив так как ничего не найдёно.
0
говорю прямо — то что мы щас обсуждаем херня и «не стоит выеденного яйца» относительно доса :) просто об этом была изначальная CVE
-1
Не, то что вы написали имеет смысл, если используется
Поэтому если используется
Так что можно посоветовать как вариани переписать на
Model.find()
, а она судя по книгам и скринкастам используется повсеместно. Хотя в тех же книгах в первых же главах всегда пишут — «Не доверяйте всему, что приходит в приложение из вне...».Поэтому если используется
Model.find()
, действительно если передать symbol :all из базы будут забираться все записи, что не очень хорошо.Так что можно посоветовать как вариани переписать на
Model.where(id: id)
, если не хочется отключать альтернативные парсеры? 0
ну это разные вещи. в первом случае надо бы .to_s приводить или .to_i например.
а парсеры надо отключать по совсем другой причине ДОС ОЛОЛО ВСЕ УМРЕМ
а парсеры надо отключать по совсем другой причине ДОС ОЛОЛО ВСЕ УМРЕМ
-1
Отключить парсеры и получить не рабочий ajax и api?
Отключения парсеров не решение.
И в чём дос я так понять не могу. При использовании
Выше вы писали:
Но это как бы не правильно или я чего то не знаю?
В руби символы ссылаются на один и тот же кусок памяти если символ уже использовался и память выделилась в отличие от
Попробуйте в irb
Отключения парсеров не решение.
И в чём дос я так понять не могу. При использовании
where
или .to_s
мы предотвращаем описываемую вами проблему.Выше вы писали:
Просто достаточно 1 компьютера чтобы постепенно забить символами всю память
Но это как бы не правильно или я чего то не знаю?
В руби символы ссылаются на один и тот же кусок памяти если символ уже использовался и память выделилась в отличие от
String
Попробуйте в irb
10.times do
puts :all.object_id
end
+1
тепло тепло уже совсем горячо :)
я удалил код для доса. :all тут не причем. генерируется куча :a1 :a2…
я удалил код для доса. :all тут не причем. генерируется куча :a1 :a2…
-1
Ох, теперь всё понял. Руби действительно не удаляет символы позволяя тем самым использовать их повторно и более того ещё помещает их в
Я просто вцепился в sql injection и не понял сути второй части поста.
Как это раньше никто не обратил на это внимания?)
Действительно косяк, причём огромный:)
Спасибо за статью
dictionary
— Symbol.all_symbols
Я просто вцепился в sql injection и не понял сути второй части поста.
Как это раньше никто не обратил на это внимания?)
Действительно косяк, причём огромный:)
Спасибо за статью
0
Какой же это косяк? Это особенность символов, ради которых они, собственно, и были созданы. Они всегда в одном экземпляре и существуют в течении жизни приложения. За счет этого работают быстрее строк. Но и использовать их как строки нельзя. Т.е., например, нельзя использовать в пользовательском вводе #to_sym за избежанием зафлуживания символами.
+1
Егор, тебе же никто не мешает закоммитить исправления :)
-1
То есть как я понял приведение xml запроса с type=«symbol» к символу будет каждый раз ссылаться на тот же участок памяти и можно слать каждый раз все больше и больше?
0
Вы опечатались или не так поняли, как и я в начале. Автор имеет ввиду, что можно рендомно генерить symbol и посылать (каждый раз новый) через
type="symbol"
, тем самым вынуждая выделять память под новый symbol. А так как они не отчищаются Garbage Collector, постепенно они забьют всю памать.+1
Sign up to leave a comment.
Rails params & GC