[Office] 1.7.0 - улучшение безопасности
Привет, друзья!
Вдохновение от недавней MODXpo еще не прошло, зато появились сообщения о целенаправленной атаке на сайты с установленным дополнение Office.
Суть в том, что какие-то нехорошие люди шлют запросы напрямую на ajax коннектор с указанием email по списку и спамерским сообщением в пароле. Так как Office по умолчанию отправляет пароль и люди видят этот спам от имени сайта.
Сообщения такие появились пару дней назад, и должен признать, это очень остроумный способ рассылки.
Так как платные дополнения у меня в приоритете, я немедленно бросил все дела и выпустил новую версию, которая исправляет возможность делать подобные гадости аж двумя способами.
Во-первых, если пользователь указал в форме регистрации свой пароль (или спамерское сообщение), на почте он его не увидит. И правда, зачем это нужно, если он сам его указал — он же его знает, верно?
Автоматически сгенерированные пароли будут приходить, как и прежде. Не забудьте обновить чанк tpl.Office.auth.register, чтобы красиво прятать блок с паролем, при его отсутствии!
Во-вторых, я встроил CSRF токены, которые давно и успешно работают на modhost/modstore. Суть в том, что при отправке формы добавляется еще поле csrf со случайным кодом, который сравнивается со значением в сессии пользователя.
Отсюда 3 вывода:
— У юзера вообще должна быть сессия между запросами. Для робота это означает необходимость приёма и отправки сессионной куки.
— Юзер должен открыть страницу с формой входа, чтобы получить текущее значение csrf токена, просто долбиться на коннектор больше не выйдет.
— А после регистрации пользователя и сброса пароля, токен генерируется заново — так что нужно снова открыть страницу входа.
Конечно, можно написать робота, который будет соблюдать все эти правила, но это уже гораздо сложнее, чем просто слать POST запросы. А учитывая отключенную возможность отправить свой текст вместо пароля — и вовсе, бессмысленно.

Как мне кажется, заодно решается и вопрос с капчей, которую многие хотят встроить для защиты — CSRF должен помочь и с этим.
Если вдруг, по какой-то причине, новая функция вам помешает — её можно отключить системной настройкой office_check_csrf. Так что, друзья, срочно обновляем все свои сайты и радуемся!
Кстати, вот заметка от Володи, как почистить левые аккаунты.
Вдохновение от недавней MODXpo еще не прошло, зато появились сообщения о целенаправленной атаке на сайты с установленным дополнение Office.
Суть в том, что какие-то нехорошие люди шлют запросы напрямую на ajax коннектор с указанием email по списку и спамерским сообщением в пароле. Так как Office по умолчанию отправляет пароль и люди видят этот спам от имени сайта.
Сообщения такие появились пару дней назад, и должен признать, это очень остроумный способ рассылки.
Так как платные дополнения у меня в приоритете, я немедленно бросил все дела и выпустил новую версию, которая исправляет возможность делать подобные гадости аж двумя способами.
Во-первых, если пользователь указал в форме регистрации свой пароль (или спамерское сообщение), на почте он его не увидит. И правда, зачем это нужно, если он сам его указал — он же его знает, верно?
Автоматически сгенерированные пароли будут приходить, как и прежде. Не забудьте обновить чанк tpl.Office.auth.register, чтобы красиво прятать блок с паролем, при его отсутствии!
Во-вторых, я встроил CSRF токены, которые давно и успешно работают на modhost/modstore. Суть в том, что при отправке формы добавляется еще поле csrf со случайным кодом, который сравнивается со значением в сессии пользователя.
Отсюда 3 вывода:
— У юзера вообще должна быть сессия между запросами. Для робота это означает необходимость приёма и отправки сессионной куки.
— Юзер должен открыть страницу с формой входа, чтобы получить текущее значение csrf токена, просто долбиться на коннектор больше не выйдет.
— А после регистрации пользователя и сброса пароля, токен генерируется заново — так что нужно снова открыть страницу входа.
Конечно, можно написать робота, который будет соблюдать все эти правила, но это уже гораздо сложнее, чем просто слать POST запросы. А учитывая отключенную возможность отправить свой текст вместо пароля — и вовсе, бессмысленно.

Как мне кажется, заодно решается и вопрос с капчей, которую многие хотят встроить для защиты — CSRF должен помочь и с этим.
Если вдруг, по какой-то причине, новая функция вам помешает — её можно отключить системной настройкой office_check_csrf. Так что, друзья, срочно обновляем все свои сайты и радуемся!
Кстати, вот заметка от Володи, как почистить левые аккаунты.
Комментарии: 29
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А то сегодня уже 1000 пустых регистраций было…
Спасибо за обновление. Однако, есть один момент.
На одном из проектов используется регистрация по номеру телефона. При первой попытке отправить форму, если не было ошибок в форме регистрации, все отлично, токен проходит проверку. Однако, если ввести код подтверждения из смс, и попробовать отправить, возникает ошибка токена. Поэтому пришлось отключить эту функцию через системные настройки.
Поправил, обновляйся и проверяй.
Пиши в поддержку магазина, оставляй адрес админки, логин и пароль — будем проверять, в чём дело.
Подскажите пожалуйста пару моментов как правильней делать и где копать
1. Создал контроллер auth2.class.php, поправил formRegister, проверял некоторые поля из формы, например проверку ссылки Вк:
После передаю в функцию $this->_createUser(), в ней доже передаю в массив
Правильно ли так проверять поля из формы?
2. Нужно же удалять старый контроллер контроллер auth.class.php?
т.к. я в инспекторе кода поменяю с auth2/formRegister на auth/formRegister и спокойно зарегистрируюсь с помощью email, без обязательных полей
3. Есть ли js колбеки, например мне после того как регистрация прошла и jGlow высвечивает сообщение о том что мне выслана ссылка, мне нужно закрывать модальное окно регистрации и открывать другое окно более информативное чем jGlow.
Или придется копировать /assets/components/office/js/auth/default.js и переписывать?
4. Так же еще небольшой вопрос, при отправке не присваивается класс error для input если они не прошли проверку, как бы хочется выделять красным input. Тут я полагаю переписывать надо auth2.class.php и default.js.
В auth2.class.php для функции error дополнительно передавать массив и название поля с ошибкой
После отлавливать в js и присваивать класс
В ajaxForm все проще конечно было со 2 и 3 пунктом :)
1 и 2-ой пункт, сделал так же как описал выше.
Обновился я до последней версии и решил рассказать одному своему знакомому php-программисту мол
смотри какая штука должна защитить от регистрации левых аккаунтов. На что мне он через 5 минут прислал файл в 45 строчек кода — который за секунду 100 аккаунтов регистрирует несмотря на csrf токкены.
Просто два последовательных запроса через curl на форму регистрации, первым получает её, вторым отправляет.
Конечно, следует сказать, что для максимального удобства пользователей капча на сайте не используется.
Так что на счёт большой сложности написания подобного робота я не совсем уверен, но за дополнительную защиту, конечно, спасибо автору.
Если проблема будет повторяться — придумаем что-нибудь еще, а пока лично мне не хочется бесить людей каптчами.
Все дополнения перед покупкой можно протестировать на modhost.pro.
joxi.ru/zANpLRJsBkQ6Gm
'brЭто поле не должно быть пустым'
Разобрался, что из-за плагина и в контроллере
за счет addField добавляется br
пофиксить это можно:
Как сделать так чтобы output не писал в журнал ошибок
Хотел узнать, может можно, если включена авторизация по email, то номер телефона тоже бы мог использоваться как логин?