Как стать автором
Обновить

Комментарии 16

Про какое исправление в какой конкретно новой версии вы говорите?
Исправлением стало проверка request.xhr? для всех .JS GET запросов. Версию на память не помню, одна из последних.
Давненько Егор Хомяков не взламывал интернет…
Я больше шаловством не занимаюсь. Секурити рисерчер, вери консалтинг, мач индепендент.
Заголовок статьи не совсем верный. Это не RJS, который был только в 2.x, это просто JS шаблоны.
Да, но люди часто ассоциируют одно с другим. Никто не знает про SJR
Я сразу и вовсе подумал о r.js (оптимизатор от Require.js). Вводите заголовком в заблуждение.
Егор, RJS сто лет уже никто не использует, ты отстал от жизни.
пост не про RJS. под RJS подразумеваются жс шаблоны и это очевидно
По мне, вообще порочная практика — возвращать исполняемый код. Я убежден, что общение должно осуществляться данными, а весь код должен лежать отдельно — а для продакшена вообще, отдаваться единым файлом в минимизированном и обфусцированном виде не более одного раза.
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% случаев программа не должна генерировать свой (новый) код — только новые данные, обрабатываемые таким кодом, чтобы обеспечивать свое адекватное поведение.
А что если надо будет по этим данным построить нетривиальный кусок html-я?
С помощью 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
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации