[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 пустых регистраций было…
А то сегодня уже 1000 пустых регистраций было…
Обновись — порадуй спамеров!
Спасибо за оперативность, Василий!
Василий, приветствую!
Спасибо за обновление. Однако, есть один момент.
На одном из проектов используется регистрация по номеру телефона. При первой попытке отправить форму, если не было ошибок в форме регистрации, все отлично, токен проходит проверку. Однако, если ввести код подтверждения из смс, и попробовать отправить, возникает ошибка токена. Поэтому пришлось отключить эту функцию через системные настройки.
Спасибо за обновление. Однако, есть один момент.
На одном из проектов используется регистрация по номеру телефона. При первой попытке отправить форму, если не было ошибок в форме регистрации, все отлично, токен проходит проверку. Однако, если ввести код подтверждения из смс, и попробовать отправить, возникает ошибка токена. Поэтому пришлось отключить эту функцию через системные настройки.
Да, об этом я не подумал.
Поправил, обновляйся и проверяй.
Поправил, обновляйся и проверяй.
Спасибо, теперь все отлично!
Вечер добрый. Спасибо за обновление. Спама нет. Только теперь не приходят письма с подтверждением регистрации. Сначала думал, что с почтой на сервере что-то не так, потом и так и сяк переменял email адреса ms2_email_manager и emailsender. Все тщетно. Не знаю куда копать.
Не думаю, что это как-то может быть связано в обновлением.
Пиши в поддержку магазина, оставляй адрес админки, логин и пароль — будем проверять, в чём дело.
Пиши в поддержку магазина, оставляй адрес админки, логин и пароль — будем проверять, в чём дело.
У меня уже прошел год с момента покупки Office, написать не могу. Куда написать?
Можно продлить поддержку, можно самому разобраться с отправкой писем.
Доброго времени суток!
Подскажите пожалуйста пару моментов как правильней делать и где копать
1. Создал контроллер auth2.class.php, поправил formRegister, проверял некоторые поля из формы, например проверку ссылки Вк:
Правильно ли так проверять поля из формы?
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 дополнительно передавать массив и название поля с ошибкой
В ajaxForm все проще конечно было со 2 и 3 пунктом :)
Подскажите пожалуйста пару моментов как правильней делать и где копать
1. Создал контроллер auth2.class.php, поправил formRegister, проверял некоторые поля из формы, например проверку ссылки Вк:
// Check vk
$vk = trim(@$data['vk']);
if (!empty($vk)) {
if (!preg_match('/https?:\/\/(www\.)?vk\.com\/([^\/].+)/', $vk)) {
return $this->error($this->modx->lexicon('Неверная ссылка на ВКонтакте'));
}
}else{
return $this->error('Вы не указали ссылку на ВКонтакте!');
}
После передаю в функцию $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 дополнительно передавать массив и название поля с ошибкой
$this->error('Ошибка поля VK', array('err' => 'vk'));
После отлавливать в js и присваивать классВ ajaxForm все проще конечно было со 2 и 3 пунктом :)
перепутал
В ajaxForm все проще конечно было со 3 и 4 пунктом :)
Люди добрые подскажите как надо программировать :))
1 и 2-ой пункт, сделал так же как описал выше.
1 и 2-ой пункт, сделал так же как описал выше.
Вопросы по платным дополнениям принимаются в поддержке магазина.
«Конечно, можно написать робота, который будет соблюдать все эти правила, но это уже гораздо сложнее, чем просто слать POST запросы........»
Обновился я до последней версии и решил рассказать одному своему знакомому php-программисту мол
смотри какая штука должна защитить от регистрации левых аккаунтов. На что мне он через 5 минут прислал файл в 45 строчек кода — который за секунду 100 аккаунтов регистрирует несмотря на csrf токкены.
Просто два последовательных запроса через curl на форму регистрации, первым получает её, вторым отправляет.
Конечно, следует сказать, что для максимального удобства пользователей капча на сайте не используется.
Так что на счёт большой сложности написания подобного робота я не совсем уверен, но за дополнительную защиту, конечно, спасибо автору.
Обновился я до последней версии и решил рассказать одному своему знакомому php-программисту мол
смотри какая штука должна защитить от регистрации левых аккаунтов. На что мне он через 5 минут прислал файл в 45 строчек кода — который за секунду 100 аккаунтов регистрирует несмотря на csrf токкены.
Просто два последовательных запроса через curl на форму регистрации, первым получает её, вторым отправляет.
Конечно, следует сказать, что для максимального удобства пользователей капча на сайте не используется.
Так что на счёт большой сложности написания подобного робота я не совсем уверен, но за дополнительную защиту, конечно, спасибо автору.
Это замечательно, только какой смысл их регистрировать, если спам сообщение в письме больше не отправляется?
Если проблема будет повторяться — придумаем что-нибудь еще, а пока лично мне не хочется бесить людей каптчами.
Если проблема будет повторяться — придумаем что-нибудь еще, а пока лично мне не хочется бесить людей каптчами.
На счёт капч полностью согласен. А по поводу левых аккаунтов, хочу подождать немного и посмотреть много ли таких инициативных найдётся, кто решится обходные пути искать. Может оно и не зачем будет с капчами морочиться.
Тем более, что Гугл каптчи вообще не напрягают.
Здравствуйте. Планирую купить последний Office. Будет ли он совместим с Minishop 2.2, который установлен на сайте?
Василий, подскажи где этот глюченный лексикон найти?
joxi.ru/zANpLRJsBkQ6Gm
'brЭто поле не должно быть пустым'
Разобрался, что из-за плагина и в контроллере
пофиксить это можно:
joxi.ru/zANpLRJsBkQ6Gm
'brЭто поле не должно быть пустым'
Разобрался, что из-за плагина и в контроллере
// Check vk
$vk = trim($_POST['vk']);
if (!empty($vk)) {
if (!preg_match('/https?:\/\/(www\.)?vk\.com\/([^\/].+)/', $vk)) {
$modx->error->addField('vk', 'Неверная ссылка на ВКонтакте.');
$modx->event->output('Неверная ссылка на ВКонтакте.');
}
}else{
$modx->error->addField('vk', 'Это поле не должно быть пустым.');
$modx->event->output('Вы не указали ссылку на ВКонтакте!');
}
за счет addField добавляется brпофиксить это можно:
protected function _formatProcessorErrors(modProcessorResponse $response, $glue = 'br')
{
****
}
//заменив $glue = '< br >' - без пробелов
protected function _formatProcessorErrors(modProcessorResponse $response, $glue = '< br >')
{
****
}
Один вопрос только остался
Как сделать так чтобы output не писал в журнал ошибок
Как сделать так чтобы output не писал в журнал ошибок
$modx->event->output('')
У office вместо логина можно войти с телефоном? Просто мне пишет пользователь не найден, хотя телефон в mobilephone есть…
Не пользовался Office но думаю что нет — в modx можно авторизоваться только по логину, по другим полям — нет. Ну и плюс, поле телефон — не уникально и ничего не мешает иметь две анкеты с одним номером, как тогда авторизоваться?
Ну вообще то авторизовать пользователя можно по чему угодно, хоть по имени, да и сделать поле телефона уникальным тоже труда не составит, я уже молчу что можно не делая его уникальным просто на событие добавить ручную проверку уникальности, код древний как говно мамонта, да и не везде правильный, но вот пример абсолютно кастомной авторизации с регистрацией по любому полю github.com/pavel-one/modxCustomAuth
Ну это в случае кастомной авторизации конечно можно. Я обычно пишу для каждого сайта свою систему авторизации, поэтому там да — логику строю как мне нужно. А разве office позволяет авторизоваться по любому полю?
Унаследовав процессор, и поменяв пару строк почему нет?
верно верно, но все равно это кастомизация. Я так понимаю Сергей спрашивал за работу из «коробки».
В office есть возможность авторизации по телефону так же, переключив системную настройку.
Хотел узнать, может можно, если включена авторизация по email, то номер телефона тоже бы мог использоваться как логин?
Хотел узнать, может можно, если включена авторизация по email, то номер телефона тоже бы мог использоваться как логин?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.