Не могу войти на Sendpulse — токен отсутствует или неверен

если Sendpulse не принимает пароль аккаунта

Обычно эта ошибка токена возникает из-за неспособности браузера определять точки доступа пользователей .. такая ошибка часто возникает, когда у нас одновременно открыты еще одна или две аналогичные вкладки служб!

Принцип решения логина аккаунта Sendpulse довольно прост, но неожиданная задача входа на почтовый сайт, как уже упоминалось, сбивает с толку!

Вот страница входа в сервис:

//login.sendpulse.com/login/

. и это, например, предупреждение:

sendpulse - не принимать

Перезагрузка (как предлагает сервис) страницы и переписывание пароля на этом этапе, как правило, не помогает.

Тем не менее, для некоторых владельцев некоторые меры защиты браузера оказываются очень успешными, например — мы попытаемся удалить файлы cookie почтовой службы и в целом — все данные личного аккаунта, чтобы каким-то образом обновить токен:

1 — удалить данные сервиса: куки, пароли и кеш и т.д.

В теме этого поста . и чтобы хоть как-то подтолкнуть читателя к мысли о решении проблемы доступа к аккаунту Sendpulse, напоминаю: удаление куки в браузере, например в Firefox, происходит именно в этих браузерах настройки адресной строки:

(во всех остальных случаях в разных браузерах решения аналогичны!)

sendpulse - токен пароля

Если это не помогает, предупреждение никуда не делось . хорошо (защита браузера никогда не бывает лишней))! — перейдем к следующему варианту:

Попробуйте войти в свою учетную запись в другом браузере. Вход в норму будет свободен! Все отлично! однако мы должны восстановить пароль в нашем рабочем веб-браузере, чтобы не делать ненужных жестов.

Методы защиты

Есть 3 способа использовать токены для защиты веб-сервисов от CSRF-атак:

  • Токен синхронизации (с полным состоянием)
  • Двойная отправка cookie (без сохранения состояния)
  • Зашифрованный токен (без сохранения состояния)

Synchronizer Tokens

Простой подход, который используется везде. Требуется серверное хранилище токена.

Этот подход не требует хранения данных на стороне сервера, что означает, что он не имеет состояния. Используется, когда вы хотите иметь возможность быстро и эффективно масштабировать веб-службу по горизонтали. Идея состоит в том, чтобы передать токен клиенту двумя способами: в файлах cookie и в одном из параметров ответа (заголовок или в HTML-коде).

Encrypted Token

Как и Double Submit, это подход без гражданства. Главный из них заключается в том, что если вы зашифруете некоторые данные с помощью надежного алгоритма и передадите их клиенту, клиент не сможет подделать их, не зная ключа. Этот подход не требует использования файлов cookie. Токен передается клиенту только в параметрах ответа.

В этом подходе токеном являются факты, зашифрованные с помощью ключа. Минимальные необходимые факты — это идентификатор пользователя и временная метка генерации токена. Ключ не должен быть известен клиенту.

как восстановить пароль sendpulse

На странице входа, соответственно, нажмите «Забыли пароль?».

… Через некоторое время на указанный адрес электронной почты будет отправлена ​​ссылка на страницу восстановления пароля SendPulse.

Можно перейти по ссылке прямо из письма (в другом браузере) и . сменить пароль — Но !! Советую (если ваша почта открыта в стороннем браузере) скопировать ссылку и вставить ее в адресное окно вашего основного браузера: так данные будут обновлены и больше не нужно будет ничего вводить!

sendpulse - методы восстановления пароля

Ну вот и все — доступ восстановлен!

Напомню: все последующие манипуляции с безопасностью вашей служебной учетной записи следует производить во вкладках «Настройки учетной записи» / «Безопасность.

sendpulse - токен ошибки пароля

Защита

В приведенном выше примере атака использовала слабое звено авторизации.

Файлы cookie позволяют сайту mail.com проверить, что Вася пришел, но ничего не говорят о данных, которые он отправляет.

Другими словами, куки не гарантируют, что Вася создал форму. Они только удостоверяют личность, а не данные.

Типичный способ защиты сайтов — это «секрет», специальное значение, которое случайным образом генерируется при входе в систему и сохраняется в сеансе посетителя. Об этом знает только сервер, мы даже не будем его показывать посетителю.

Конечно, у разных посетителей секрет будет разный.

Затем на основе ключа генерируется «токен». Токен сделан так, что, с одной стороны, он отличается от секретного ключа, в частности, для ключа может быть много токенов, с другой стороны, так что по токену легко проверить, был ли он генерируется на основе предоставленного ключа или нет.

Для этого для каждого токена используется дополнительное случайное значение, называемое продажей «продажа.

Формула расчета токена:

токен = продажа + «:» + MD5 (продажа + «:» + секрет)

Например:

  1. В сеансе хранится secret = «abcdef», это значение создается один раз.
  2. Мы генерируем соль для нового токена, например let salt = «1234».
  3. token = «1234» + «:» + MD5 («1234» + «:» + «abcdef») = «1234: 5ad02792a3285252e524 происходит с3401».

С одной стороны, это значение случайное, с другой, получив такой токен от пользователя, мы можем его проверить: разделить на символ двоеточия, взять его левую часть 1234 как соль и, зная секрет, запустить расчет по формуле выше. Если мы получили то же самое, токен правильный, а не хакерский.

Примечание. Не зная секрета, невозможно сгенерировать токен, который сервер будет воспринимать как правильный.

Впоследствии токен добавляется в виде скрытого поля в каждую форму, созданную на сервере.

То есть «честная» форма для отправки сообщений, созданная на http://mail.com, будет выглядеть так:

При его отправке сервер проверит поле csrf, убедится, что токен верен, и только после этого отправит сообщение.

«Злая страница» не сможет сгенерировать такую ​​форму, так как у нее нет секрета, и токен не будет действителен.

Этот токен также называется «подписью» формы, которая удостоверяет, что форма была сгенерирована на сервере.

Подпишите с полями формы

Эта подпись указывает на то, что автором формы является сервер, но не дает никаких гарантий относительно ее содержания.

Бывают ситуации, когда мы хотим быть уверены, что некоторые поля формы не были произвольно изменены посетителем. Таким образом, мы можем включить эти поля в MD5 для формулы токена, например:

token = sale + «:» + MD5 (sale + «:» + secret + «:» + fields.money)

После отправки формы сервер проверит подпись, заменив в ней известный секрет и отправленное значение полей. Если есть несоответствие, значит, неверен секрет (хакер) или поменяно поле. Деньги.

Требования к Web-Сервису и окружению:

  • Нет уязвимостей XSS

    Сценарий, внедренный злоумышленником, имеет возможность отправить запрос на сервер от имени пользователя и прочитать его без каких-либо препятствий.

    Следовательно, для получения текущего токена можно использовать уязвимости XSS.

  • На клиентском компьютере нет вредоносных программ

    Если злоумышленник может запустить программное обеспечение на клиентском компьютере, он может получить все данные, доступные в браузере.

Шаблон RealMik 4 0 0 — с фиксированным меню

Модель RealMik с боковой панелью и фиксированным верхним меню

Формы оплаты услуг студии ATs media fashion

aTs media fashion studio услуги

Пример жульничества

Мы создаем два приложения Spring Boot:

  • цель для атаки, «банковское» приложение на порту 8080
  • и мошеннический сайт на порту 8081

Поскольку в этом примере мы сделаем запрос для «другого домена», мы напишем новое имя для localhost: 8080 в файле hosts:

C: Windows System32 drivers etc hosts

А именно добавьте строку в файл hosts:

127.0.0.1 банк-сервер

Теперь займемся целевым приложением по адресу http: // bank-server: 8080 / вместо http: // localhost: 8080..

Приложение-мишень

Итак, предположим, что в нашем приложении есть контроллер и модуль, из которого что-то добавляется:

Добавление
Добавить открытый класс @ Controller DocumentController {@PostMapping («/ add») public String add (документ документа, шаблон шаблона) {System.out.println (document.getId () + «» + document.getText () + «added»); model.addAttribute («документ», документ); model.addAttribute («сообщение», «добавлено»); System.out.println («Постмэппинг / добавление»); возвращает «добавить»; } @GetMapping («/ add») public String get () {System.out.println («GetMapping / add»); возвращает «добавить»; } @GetMapping («/») public String main () {return «redirect: / add»; } }

Форма на Thymeleaf выглядит так:

При этом адрес http: // bank-server: 8080 / add защищен, доступ к нему возможен только благодаря cookie JSESSIONID после входа в систему через форму входа.

Приложение имеет в памяти одного пользователя с именем user и password user:

Открытый класс @EnableWebSecurity SecurityConfig расширяет WebSecurityConfigurerAdapter {@Bean public PasswordEncoder passwordEncoder () {return NoOpPasswordEncoder.getInstance (); } @Override public void configure (AuthenticationManagerBuilder auth) генерирует исключение {auth.inMemoryAuthentication () .withUser («пользователь») .password («пользователь») .authorities («ROLE_USER»); } @Override protected void configure (HttpSecurity http) выдает исключение {http.authorizeRequests () .anyRequest (). Прошедшие проверку (). И (). FormLogin (); http.csrf () disable(); } }

Выше указано, что все запросы доступны только для аутентифицированных пользователей (включая нашу форму — получение / добавление с использованием метода GET и отправка с использованием метода POST). Форма находится в шаблоне add.html

Мы отключили проверку токена CSRF отдельной строкой выше:

http.csrf () disable();

Это сделано для демонстрации атаки с использованием второго приложения ниже. А затем снова включите токен CSRF. (По умолчанию он уже активен, вам просто нужно не забыть добавить его в форму, которая будет показана в конце).

Мошенническое приложение

Второе приложение довольно простое, оно состоит из представления с кнопкой атаки POST (полный код здесь):

Мошеннический сайт
Сайт мошенников

Мошенническая кнопка:

Кнопка отправляет форму со скрытыми полями: id = «1» и text = «document». Если в браузере мы подключаемся к приложению http: // bank-server: 8080 и открываем мошеннический сайт localhost: 8081 с помощью кнопки выше и нажимаем на нее, сохраненный файл cookie JSESSIONID также отправляется, и мы вводим защищенный метод add () DocumentController сайта банка… Документ добавлен.

Токен и AJAX

Теперь перейдем к запросам AJAX.

Что, если отправка сообщений в нашем интерфейсе реализована через XMLHttpRequest?

Как и в случае с формой, мы должны «подписать» запрос токеном, чтобы гарантировать, что его содержимое отправляется на сервер из интерфейса сайта, а не с «злой страницы».

Здесь возможны вариации, самый простой — дополнительный cookie.

  1. После авторизации сервер устанавливает файл cookie с именем CSRF-TOKEN и записывает в него токен.

  2. Код, реализующий XMLHttpRequest, получает cookie и вставляет с ним заголовок X-CSRF-TOKEN:

    var request = new XMLHttpRequest (); var csrfCookie = document.cookie.match (/ CSRF-TOKEN = ( w — +) /); если (csrfCookie) {request.setRequestHeader («X-CSRF-TOKEN», csrfCookie 1

  3. Сервер проверяет, присутствует ли заголовок и содержит ли он правильный токен.

Защита работает, потому что только JavaScript из того же домена может читать cookie. «Злая страница» не сможет «переместить» cookie в заголовок.

Если вам не нужно запускать XMLHttpRequest, но, например, динамически генерировать форму из JavaScript, который также подписан таким же образом, cookie генерирует скрытое поле или дополнительный параметр URL.

Как работает подделка межсайтовых запросов

Эта атака нацелена на запросы на изменение состояния, которые относятся к типу запросов, которые изменяют данные с одного значения на другое. Например, целевой запрос может сделать покупку или изменить значение в учетной записи. Интересно, что это «слепая атака», которая не возвращает данные злоумышленнику, что делает его плохим выбором для кражи данных.

Как от нее защититься?

Эффективным и общепринятым методом защиты от CSRF-атаки сегодня является токен. Маркер указывает случайный набор байтов, который сервер передает клиенту, а клиент возвращает серверу.

Безопасность сводится к проверке токена, сгенерированного сервером, и токена, отправленного пользователем.

А что, собственно, защищать?

Если вы пишете свой веб-сервис в соответствии со стандартом RFC7231, тогда методы GET, HEAD, OPTIONS и TRACE безопасны: они служат только для получения информации и не должны изменять состояние сервера.

Следовательно, необходимо защитить небезопасные методы, к которым относятся: POST, PUT, DELETE, PATCH.

 

Что еще нужно знать?

Токены являются обязательной защитой от CSRF.

  • Проверьте, но не полагайтесь исключительно на X-Requested-With: XMLHttpRequest

  • Проверяйте, но не полагайтесь только на заголовки: Host, Origin, Referer

  • Не передавайте токены в URL

  • Защитите все запросы.

О реализации

  • Мы генерируем новый токен для каждого запроса, независимо от метода HTTP и для какой цели этот запрос сделан.

    Таким образом, мы получаем постоянно меняющийся токен.

    Конечно, возникает вопрос об организации работы с несколькими вкладками.

Синхронизацию токенов между картами можно реализовать с помощью localStorage и его StorageEvent

  • Мы ограничиваем время жизни файла cookie, содержащего токен, разумным значением. Например 30 минут.

  • Делаем cookie недоступным из JS (устанавливаем HTTPOnly = true)

  • Использование TLS для предотвращения MITM

    В этом случае мы отправляем файлы cookie только через HTTPS (установите Secure = true)

  • Размер токена составляет не менее 32 байтов.

  • Мы генерируем токен с помощью криптографически стойкого генератора псевдослучайных чисел.

    Для этого можно использовать системные функции:

    Linux => getrandom (2), если возможно, / dev / urandom в противном случае OpenBSD => getentropy (2) В других Unix-подобных системах => / dev / urandom Windows => CryptGenRandom API

Источники

  • https://mihalica.ru/sendpulse-vhod-oshibka-tokena/
  • https://gist.github.com/Furdarius/a7b7f99db35a64034cefc32fee72ab1b
  • https://learn.javascript.ru/csrf
  • [https://sysout.ru/csrf-token/]
  • [https://owlweb.ru/chto-takoe-ataka-csrf-kak-rabotaet-i-kak-ee-maksimalno-smjagchit/]

Оцените статью
Блог о JavaScript