metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-07 12:12 pm

Special Olympics - айсед в рантайме

скриншот
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и wget и редактированием конфига нашло только несколько мелких багов, типа "приложение показывает 500 Server error если указать кривой url".
Еще один мелкий баг был - редактирование конфига отчетов привело к незапускаемости rails s вообще, с диким стек-трейсом.
После исправления практически все кривые запросы напрямую к json-сервис показывали 403.
Ошибки в конфиге отчетов пишутся в лог сервиса.

Еще один крайне спорный момент: обработка параметров запроса:

      @sql.scan(/\?\w+/).each do |name|
        real_name = name[1 .. -1].downcase
        parameter = @parameters.find { |p| p.name == real_name }
        value = ActiveRecord::Base.sanitize(parameters[@parameters.index(parameter)])
        expanded_sql.sub!(name, value)
      end


[livejournal.com profile] theiced не использует препаред статементы,а вместо этого заменяет параметры регэкспом, а их значения обрабатывает ActiveRecord::Base.sanitize. Т.е. если мы верим либе - то у нас sql-injection не будет. Айсед утверждает, что у них так принято, хотя я всегда считал что единственно кошерный вариант - это препаред статементы и обработка переменных-параметров сервером.

Это решение, кстати, делает невалидными(не грузит их) такого рода sql-запросы:
select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval
т.к. ?somestring оно считает параметром, хотя он очевидно не параметр, а литерал

[identity profile] theiced.livejournal.com 2012-02-07 11:55 am (UTC)(link)
http://metaclass.livejournal.com/662002.html?thread=11187442&style=mine#t11187442

аргументы или присоединяйтесь к весёлой групке уже сосущей мой хуй.

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

[identity profile] dnnx.livejournal.com 2012-02-07 05:33 pm (UTC)(link)
Ящитаю, что основной аргумент против - это запросы типа `select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval`, как сказал ребе метакласс. Ну и ещё тот факт, что практически у любого, кто видит этот код, возникает вопрос "что за похапешник это писал". Это видно на примере даже этого треда.

А что касается производительности - тут я с ребе айседом согласен. Нужно сначала мерять, а потом уже тюнить.

[identity profile] theiced.livejournal.com 2012-02-07 05:46 pm (UTC)(link)
ну кому надо - уберите те 5 строк и замените .execute(expanded_query) на .exec_query(query, 'SQL', binds)