Entry tags:
Special Olympics - айсед в рантайме
скриншот
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и wget и редактированием конфига нашло только несколько мелких багов, типа "приложение показывает 500 Server error если указать кривой url".
Еще один мелкий баг был - редактирование конфига отчетов привело к незапускаемости rails s вообще, с диким стек-трейсом.
После исправления практически все кривые запросы напрямую к json-сервис показывали 403.
Ошибки в конфиге отчетов пишутся в лог сервиса.
Еще один крайне спорный момент: обработка параметров запроса:
theiced не использует препаред статементы,а вместо этого заменяет параметры регэкспом, а их значения обрабатывает ActiveRecord::Base.sanitize. Т.е. если мы верим либе - то у нас sql-injection не будет. Айсед утверждает, что у них так принято, хотя я всегда считал что единственно кошерный вариант - это препаред статементы и обработка переменных-параметров сервером.
Это решение, кстати, делает невалидными(не грузит их) такого рода sql-запросы:
select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval
т.к. ?somestring оно считает параметром, хотя он очевидно не параметр, а литерал
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и 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]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Это решение, кстати, делает невалидными(не грузит их) такого рода sql-запросы:
select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval
т.к. ?somestring оно считает параметром, хотя он очевидно не параметр, а литерал
no subject
no subject
Всегда знал, что Rails — это такой PHP-переросток.
(no subject)
(no subject)
no subject
(no subject)
no subject
no subject
ви ничего не понимаете, prepared statements - анальный кал, и используют его только нищеброды с xml-ем головного мозга
(/iced_mode)
no subject
(no subject)
(no subject)
no subject
(no subject)
no subject
- мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе.
минусы:
- ну есть метаклассы захотят формат параметров использовать с скобках
- чуууууть больше нагрузка на базу. умные люди меряли, она незначительна.
------
теперь пусть дурачки пизданувшие про закаты солнца вручную (artureg, sorhed, veter_r_r, falcrum) приведут воспроизводимые замеры где препаред стэйтменты дают более 10% перфоманса или возьмут мой мозолистый хуец в свой нежный ротик и начнут сосать причмокивая.
ещё раз - можно были спокойно взять ruby-dbi и использовать те самые преп стэйтменты (код даже было бы на пару строк меньше), но оно плохо, см. выше.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)