Комментарии 16
Про какое исправление в какой конкретно новой версии вы говорите?
Давненько Егор Хомяков не взламывал интернет…
Заголовок статьи не совсем верный. Это не RJS, который был только в 2.x, это просто JS шаблоны.
По мне, вообще порочная практика — возвращать исполняемый код. Я убежден, что общение должно осуществляться данными, а весь код должен лежать отдельно — а для продакшена вообще, отдаваться единым файлом в минимизированном и обфусцированном виде не более одного раза.
DHH так не думает :(
Для большинства проектов динамичный код не нужен.
Мне нравится ответ на первый вопрос здесь: tapestry.apache.org/limitations.html
> Q: How do I add new components to an existing page dynamically?
(Каким образом я могу добавить новые компоненты на существующую страницу?)
>>A: The short answer here is: you don't. The long answer here is you don't have to, to get the behavior you desire.
(Коротко: Вы не будете этого делать. Развернуто — а Вам и не нужно так делать, чтобы получить желаемое поведение)
и далее:
>>What this means is that any incoming request must be handled by a single page instance. Therefore, Tapestry enforces the concept of static structure, dynamic behavior.
(Что значит, что любой запрос должен обрабатываться одим экземпляром страницы. Таким образом, Tapestry обязывает придерживаться концепции статичной структуры и динамичного поведения.)
В 99% случаев программа не должна генерировать свой (новый) код — только новые данные, обрабатываемые таким кодом, чтобы обеспечивать свое адекватное поведение.
Мне нравится ответ на первый вопрос здесь: tapestry.apache.org/limitations.html
> Q: How do I add new components to an existing page dynamically?
(Каким образом я могу добавить новые компоненты на существующую страницу?)
>>A: The short answer here is: you don't. The long answer here is you don't have to, to get the behavior you desire.
(Коротко: Вы не будете этого делать. Развернуто — а Вам и не нужно так делать, чтобы получить желаемое поведение)
и далее:
>>What this means is that any incoming request must be handled by a single page instance. Therefore, Tapestry enforces the concept of static structure, dynamic behavior.
(Что значит, что любой запрос должен обрабатываться одим экземпляром страницы. Таким образом, Tapestry обязывает придерживаться концепции статичной структуры и динамичного поведения.)
В 99% случаев программа не должна генерировать свой (новый) код — только новые данные, обрабатываемые таким кодом, чтобы обеспечивать свое адекватное поведение.
А что если надо будет по этим данным построить нетривиальный кусок html-я?
С помощью jquery строить? Неуклюже.
Использовать шаблоны на клиентской стороне? А что с дублированием кода тогда? Ведь при первом открытии страницы подобный html уже рендерится на сервере (а часто и кэшируется!), и его можно использовать в таких js-ответах.
Плюс в случае проблем явно видно где искать. Желаю Вам не сталкиваться с проектами где весь js-код запихан изначально в один super-main-script.js файл и в нем ничего не найти сразу.
Так что не будьте так категоричны.
С помощью jquery строить? Неуклюже.
Использовать шаблоны на клиентской стороне? А что с дублированием кода тогда? Ведь при первом открытии страницы подобный html уже рендерится на сервере (а часто и кэшируется!), и его можно использовать в таких js-ответах.
Плюс в случае проблем явно видно где искать. Желаю Вам не сталкиваться с проектами где весь js-код запихан изначально в один super-main-script.js файл и в нем ничего не найти сразу.
Так что не будьте так категоричны.
Написал и initializer для Rails 3.2, который защищает от этой уязвимости.
Для Rails 4.0 достаточно просто сохранить raw2.github.com/rails/rails/4f4fdd643f9d19fbbeeec3ac77674f791c9beffa/actionpack/lib/action_controller/metal/request_forgery_protection.rb в config/initializers/unauthorized_cross-origin_response_fix.rb
Для Rails 4.0 достаточно просто сохранить raw2.github.com/rails/rails/4f4fdd643f9d19fbbeeec3ac77674f791c9beffa/actionpack/lib/action_controller/metal/request_forgery_protection.rb в config/initializers/unauthorized_cross-origin_response_fix.rb
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почему не нужно использовать RJS