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
э... как вообще логирование происходит???
у рубёвых либ отсутствует возможность делать callback на уровне курсора/коннекшена???
no subject