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:23 am (UTC)(link)
плюсы такого подхода:

- мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе.

минусы:

- ну есть метаклассы захотят формат параметров использовать с скобках
- чуууууть больше нагрузка на базу. умные люди меряли, она незначительна.

------

теперь пусть дурачки пизданувшие про закаты солнца вручную (artureg, sorhed, veter_r_r, falcrum) приведут воспроизводимые замеры где препаред стэйтменты дают более 10% перфоманса или возьмут мой мозолистый хуец в свой нежный ротик и начнут сосать причмокивая.

ещё раз - можно были спокойно взять ruby-dbi и использовать те самые преп стэйтменты (код даже было бы на пару строк меньше), но оно плохо, см. выше.

[identity profile] theiced.livejournal.com 2012-02-07 12:29 pm (UTC)(link)
к списку добавляем denisouru. до говноедам вам (кроме veter_r_r) пока далеко но направление взято верное.

[identity profile] denisioru.livejournal.com 2012-02-07 01:03 pm (UTC)(link)
"- мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе."

охуенно практично. "я покупаю ВАЗ, потому что его легко чинить"

"- чуууууть больше нагрузка на базу. умные люди меряли, она незначительна."

какие люди? Где они?

[identity profile] theiced.livejournal.com 2012-02-07 01:35 pm (UTC)(link)
я например. ну я как минимум умнее вас (и всех тут собравшихся наверное). ну и кроме меня меряли - там 10 процентов никогда не набиралось. даже на синтетике, в вырожденных случаях. не верите - сделайте мне тест на котором будет больше.

[identity profile] denisioru.livejournal.com 2012-02-07 03:17 pm (UTC)(link)
"ну я как минимум умнее вас (и всех тут собравшихся наверное)"
бугага, тебе это мама сказала? :)))))))))))))))

[identity profile] theiced.livejournal.com 2012-02-07 04:01 pm (UTC)(link)
это факты. я знаю людей умнее меня, в достаточном количестве, но вы к ним не относитесь.

[identity profile] theiced.livejournal.com 2012-02-07 04:01 pm (UTC)(link)
PS. я не говорю что вы тупой, нет. просто я умнее ;]

[identity profile] theiced.livejournal.com 2012-02-07 04:17 pm (UTC)(link)
замеры потерь в скорости от препэред vs эмбед будут? они же просто делаются, дерзайте.

[identity profile] denisioru.livejournal.com 2012-02-07 04:20 pm (UTC)(link)
лень. Это же надо таблицы делать и наполнять.
http://www.simple-talk.com/community/blogs/philfactor/archive/2009/08/03/74227.aspx
http://www.codeproject.com/Articles/16994/Use-SQL-Parameters-to-Overcome-Ad-Hoc-Performance

вот какие-то тесты. adhoc не использую, по причине нахуй ненужности. Что такое сбор запроса из строк забыл лет 5 назад.

[identity profile] theiced.livejournal.com 2012-02-07 04:23 pm (UTC)(link)
я что такое сикль забыл примерно тогда же. если кто то пишет сикль руками, то ему надо обрезать эти самые руки и яйца.

[identity profile] theiced.livejournal.com 2012-02-07 04:29 pm (UTC)(link)
по ссылкам - mssqlserver говно, больше ничего не вижу. я тестировал на постгре и (приготовьте мыло для глаз) мусикле. 10% были.

ещё раз - я мог просто убрать эти 5 строк и заменить .execute на .exec_query которая понимает бинды (ака параметры). но зачем если это плохо?

[identity profile] wildman.livejournal.com 2012-02-07 03:21 pm (UTC)(link)
>> мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе.
э... как вообще логирование происходит???
у рубёвых либ отсутствует возможность делать callback на уровне курсора/коннекшена???

[identity profile] theiced.livejournal.com 2012-02-07 04:01 pm (UTC)(link)
присутствует. но оно никому не нужно.

[identity profile] theiced.livejournal.com 2012-02-07 05:42 pm (UTC)(link)
на говнодб2 на синтетике получили 30%. ОК!

[identity profile] falcrum.livejournal.com 2012-02-07 05:44 pm (UTC)(link)
Вопрос был "более 10%"? База уточнялась? :)

Соглашусь, что РЕАЛЬНО надо смотреть. Это да. Но... :)

[identity profile] theiced.livejournal.com 2012-02-07 05:49 pm (UTC)(link)
см. ниже и давай тесты которые я смогу запустить.

[identity profile] theiced.livejournal.com 2012-02-07 05:48 pm (UTC)(link)
то есть я про что - давайте мерять на нормальных базах, а не на энтерпрайзно-пионерских поделках, ок? mssql, db2 и oracle идут сначала нахуй, потом всё равно нахуй.

[identity profile] falcrum.livejournal.com 2012-02-07 05:57 pm (UTC)(link)
Ну, если оракл - поделка, я уж стесняюсь придумать, как назвать всё остальное. Нащот™ "энтерпрайзной" - а олимпиада-то какая? :)

Но соскакиваешь ты интересно. :)

[identity profile] dnnx.livejournal.com 2012-02-07 05:24 pm (UTC)(link)
Чёто прошлый раз ссылка не вставилась.

http://www.engineyard.com/blog/2011/sql-server-10xs-faster-with-rails-3-1/

[identity profile] zamotivator.livejournal.com 2012-02-08 06:03 am (UTC)(link)
Вот за что я люблю theiced - за приятный и вежливый стиль общения :)

[identity profile] metaclass.livejournal.com 2012-02-08 06:30 am (UTC)(link)
Мало того, у него еще и в тесте на шизофрению самый маленький балл из нас всех.
У меня - самый большой :)