неверный параметр nonce в cookie что это

Одноразовые числа (nonce)

Во введении упоминалось, что для проверки прав есть два подхода: это «Проверка прав пользователя» и дополняющие эту проверку «Одноразовые числа».

Подробнее см. описание функции wp_create_nonce()

Пример работы Nonce

Мы не замечаем этих nonce проверок, потому что обычно все происходит быстро. Но если, например, зайти на страницу настроек в админку, подождать 24 часа и только потом попытаться сохранить данные, то внесенные изменения не сохранятся, потому что nonce проверка не будет пройдена.

Зачем нужна проверка «одноразовыми числами»?

Давайте, представим, что неавторизованный пользователь без прав, нашел уязвимое место в плагине. Например, он знает, что есть такая ссылка, нажав на которую администратор, сам не зная того, изменит какую-то настройку (опцию) на сайте, так как нужно хакеру. Например, в настройку запишется хакерский javascript (указанный в ссылке), который затем выполниться при посещении другой страницы сайта этим же администратором.

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

Например, создать страницу и в ней использовать такой код:

Или например, написать письмо администратору сайта, в которое подсунуть внешне безобидную ссылку.

Авторизованный юзер (админ), кликнет по ссылке, и в результате выполниться JS код хакера, который, к примеру, вышлет данные авторизации. И вот, некогда неавторизованный хакер стал администратором вашего сайта.

Чтобы, невозможно было проделать такую хитрость, существуют «одноразовые числа» (nonce защита).

Так как nonce число устаревает, то если добавить это число в URL или в параметр формы и затем проверять его, URL или форма будут рабочими только 24 часа. А затем, запросы создаваемые URL или формой просто не будут проходить проверку. Таким образом, если хакер заставит вас кликнуть по известной ему ссылке, то ссылка скорее всего уже будет нерабочей, потому что не пройдет проверку «одноразового числа».

Nonce Функции

Для управления одноразовыми числами в WordPress есть специальные функции. Основные из них:

Пример использования Nonce защиты

Это пример из раздела проверка прав пользователя, только к нему добавляется еще и nonce проверка.

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

Затем, при обработке запроса, проверяем одноразовое число:

Проверка referer

Для referer проверки в WordPress есть 3 функции:

Заключение

При выполнении любой операции преобразования данных, например, сохранения настроек плагина или удаление данных плагина, всегда следует убедиться, что у пользователя есть право совершать операцию (проверка прав) и что выполняемый запрос не устарел (nonce проверка).

Источник

Kolya Korobochkin

WordPress Engineer @ Setka

Перевод WordPress nonces

При подготовке иллюстрации использовался фрагмент изображения Криса Харрисона.

» data-image-caption=»» data-medium-file=»https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=300″ data-large-file=»https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=525″ src=»https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=525&h=288″ alt=»WordPress Nonces» width=»525″ height=»288″ srcset=»https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=525&h=288 525w, https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=150&h=82 150w, https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=300&h=164 300w, https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg?w=768&h=421 768w, https://korobochkin.files.wordpress.com/2015/02/wordpress-nonces.jpg 1024w» sizes=»(max-width: 525px) 100vw, 525px» />

Перевод англоязычной страницы WordPress Nonces на русский из кодекса WordPress. Много информации, технических данных и странных слов.

Nonce расшифровывается как «число, используемое один раз» (number used once) и используются для защиты URL-адресов и форм от некоторых типов неправомерного и злоумышленного использования. Nonce состоит из цифр и букв, имеют ограниченное «время жизни», после которого становятся недействительны. Генерируется Nonce для конкретного пользователя в заданном контексте. Nonce для заданного действия будет неизменной для пользователя до тех пор, пока жизненный цикл не будет закончен.

Токены безопасности в WordPress называются «одноразовыми», несмотря на различия от действительно одноразовых токенов, потому что они предназначены для тех же целей. Они помогают защититься от некоторых типов атак, включая межсайтовую подделку запросов (CSRF), но не защищают от атак повторного воспроизведения (replay atack), потому что Nonce не проверяются на использование лишь единожды.

В качестве примера того, как Nonce используется, рассмотрим некую административную страницу, на которой отображается ссылка для удаления записи с идентификатором 123. Можно заметить, что Nonce содержится в конце адреса:

Если кто-нибудь попытается изменить адрес, чтобы удалить запись с идентификатором 456, то Nonce будет недействительна и попытка удалить другую запись не увенчается успехом.

Неверная Nonce заставит WordPress отдать браузеру ответ «403 Forbidden» с сообщением об ошибке «Вы уверены, что хотите сделать это?».

» data-medium-file=»https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=300″ data-large-file=»https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=525″ src=»https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=525&h=326″ alt=»Nonce в действии. Скриншот исходного кода административной страницы WordPress.» width=»525″ height=»326″ srcset=»https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=525&h=326 525w, https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=1050&h=652 1050w, https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=150&h=93 150w, https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=300&h=186 300w, https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=768&h=477 768w, https://korobochkin.files.wordpress.com/2015/02/screen-shot-2015-02-15-at-21-57-49.png?w=1024&h=636 1024w» sizes=»(max-width: 525px) 100vw, 525px» />

Nonce в действии. Скриншот исходного кода административной страницы WordPress.

Создание Nonce

Nonce можно создавать и добавлять в качестве аргумента URL или скрытого поля внутри формы, или как-то еще.

Nonce, используемые в AJAX-запросах, обычно добавляются в скрытые поля формы, откуда к ним может получить доступ Java Script.

Стоит заметить, что Nonce уникальна для текущей сессии пользователя, поэтому, если пользователь входит или выходит асинхронно, Nonce на странице не будут действительными.

Добавление Nonce в качестве аргумента URL

Добавление Nonce в форму

Выведется что-то вроде этого:

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

Также можно задать другое имя для поля с Nonce, не выводить поле с referrer и указать, что результат необходимо вернуть, а не выводить. Для подробностей использования смотрите страницу описания функции wp_nonce_field() в Кодексе.

Создание Nonce для других видов использования

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

Проверка действительности Nonce

Вы можете проверить действительность Nonce переданной через URL или внутри формы, или AJAX-запросом, или каким-то другим способом.

Проверка Nonce, полученной с административной страницы

Функция проверит Nonce и Referrer и, если проверка не будет успешной, то произойдет обычное действие (прекращение выполнения кода с ответом 403 и сообщением об ошибке).

Если вы используете название поля для Nonce отличное от того, что задается по умолчанию ( _wpnonce ), необходимо указать его во втором аргументе:

Проверка Nonce, полученной через AJAX-запрос

Для проверки Nonce, полученной через AJAX-запрос, используется check_ajax_referer(). В качестве аргумента необходимо передать название действия:

Функция проверит Nonce (но не Referrer) и в случае, если проверка не будет успешной, завершит исполнение кода.

Если вы используете название поля для Nonce, отличное от того, что задается по умолчанию ( _wpnonce или _ajax_nonce ), необходимо передать дополнительные параметры. Подробности на странице функции check_ajax_referer() в Кодексе.

Проверка Nonce, полученной другими способами

Изменение системы Nonce

Систему работы с Nonce можно изменять, используя различные экшены и фильтры.

Изменение продолжительности жизни Nonce

Обратите внимание, что Nonce, как говорилось выше, это не «номер, используемый единожды». Срок действия Nonce не совпадает со сроком действия настоящих Nonce. WordPress использует систему с двумя «тиками», где 1 тик равносилен половине продолжительности жизни. Во время второго тика Nonce может быть обновлена, например, через автосохранение. Таким образом, при настройках по умолчанию, где продолжительность действия Nonce составляет 24 часа, это означает, что информация о времени внутри Nonce, говорит сколько двенадцатичасовых периодов времени прошло с начала эпохи Unix. Nonce, созданная в промежуток с 12:00 до 24:00 будет действительна до 12:00 следующего дня. Фактический срок службы составит значение между 12 и 24 часами. Пример выше, где срок службы устанавливался на 4 часа, означает, что Nonce будет действительна от 2 до 4 часов.

Выполнение дополнительных проверок

Для выполнения дополнительных проверок в момент, когда функция check_admin_referer() установила, что Nonce и Referrer являются действительными, можно использовать check_admin_referer в качестве экшена:

Изменение сообщения об ошибке

Сообщение с ошибкой, отдаваемое в случае недействительности Nonce, можно заменить на свое, используя фильтр gettext :

Дополнительные сведения

В завершении рассмотрим некоторые дополнительные сведения о системе работы с Nonce, которые могут пригодиться.

Срок действия Nonce

Nonce и безопасность

Замена системы для работы с Nonce

При подготовке иллюстрации для статьи использовался фрагмент изображения Криса Харрисона.

Источник

Что такое одноразовые числа (nonces) в WordPress

Любой уважающий себя движок (CMS) ответственно относится к собственной безопасности. И WordPress здесь не является исключением. Одним из наиболее распространенных методов предотвращения ряда потенциальных угроз безопасности в WordPress является использование nonces (одноразовых чисел, токенов безопасности). У них довольно простая задача: защитить все действия пользователя.

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

Знакомство с WordPress nonces

Nonce – это значение хэша, которое состоит из комбинации чисел и букв.

В WordPress nonces определяются как «числа, которые используются один раз». А их целью является защита форм и URL-адресов от определенных типов злонамеренных действий. В практическом плане nonce – это идентификационная единица, которую пользователь должен предъявить, чтобы пройти аутентификацию для выполнения любого действия.

Зачем они нужны?

Одноразовые числа безопасности защищают сайты на движке WordPress от вредоносных эксплойтов, которые основаны главным образом на подборе межсайтовых запросов (CSRF – межсайтовая подделка запроса). Этот способ взлома включает в себя передачу неавторизованных команд от пользователя, которому доверяет сайт.

Давайте рассмотрим пример, чтобы лучше понять атаку CSRF. Допустим, есть злонамеренный человек, который хочет заполнить вашу базу данных бесполезными данными, чтобы добиться ее перегруза. Если у вас на сайте есть незащищенная токенами безопасности контактная форма, злоумышленник может написать простой PHP-скрипт, который методом POST будет заполнять форму спамом. И каждый раз, когда пользователь будет нажимать на кнопку формы, в базу данных будет попадать куча спама. Если ваша база данных будет переполнена избыточными объемами данных, это может быстро перегрузить ее и негативно повлиять на производительность всего сайта.

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

Чтобы таких ситуаций не возникало и нужны одноразовые числа безопасности (nonce) в WordPress. Они добавляются к URL-адресу и призваны однозначно идентифицировать пользователя, которому разрешено производить такого рода операции. Например, URL-адрес команды удаления пользователя из базы данных может выглядеть так:

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

Как генерируются nonce и где хранятся

Одноразовые числа не хранятся ни в базе данных, ни в файловой системе. Движок WordPress генерирует nonce заново в момент проверки и сразу сравнивает с полученным.

Срок жизни для nonce

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

Значение nonce уникально для каждого активного сеанса пользователя. Это означает, что nonce будет уже недействительным, если пользователь вышел из системы, а затем снова вошел в Консоль сайта.

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

Например, если для указанной выше операции удаления пользователя:

злоумышленник заменит ID пользователя на другой (например, userid=1205 )

эта операция завершится неудачно, поскольку nonce будет недействительным.

В этом случае сайт WordPress в браузере отобразит 403-ю ошибку «Запрещено» и сообщение: «Вы уверены, что хотите это сделать?».

Практические примеры использования nonce в WordPress

Добавление nonce к URL-адресам

Если вы реализуете некоторые конкретные действия пользователя с помощью URL-адреса, добавление nonce абсолютно необходимо для предотвращения вредоносных атак. Хотя значение nonce будет видимым в ссылке, но, как мы обсуждали выше, одноразовое число будет уникальным для каждой сессии пользователя и будет бесполезным для всех других пользователей.

Этот код создаст URL-адрес, который может выглядеть примерно так:

Добавление одноразового числа в форму

Если вы добавите одноразовое число безопасности в форму, WordPress автоматически создаст нужные скрытые поля для формы. Для этого нужно вызвать функцию wp_nonce_field() и передать строку, которая обозначает действие пользователя в качестве аргумента. Функция будет генерировать два скрытых поля:

Этот вызов функции будет выводить примерно следующее:

Проверка токенов безопасности (nonce) в WordPress

Важно, чтобы вы определили nonce после создания и добавили их в URL-адреса или формы на своем сайте WordPress. Этот шаг обеспечивает правильную работу функций. Есть четыре способа проверить токены безопасности WordPress, и мы рассмотрим первые три:

Проверка числа nonce в URL-адресе

Чтобы проверить число nonce, которое было создано, добавлено и передано в URL-адрес, вы можете использовать следующий метод:

Проверка одноразового числа в форме

Чтобы проверить одноразовое число, которое был изначально создано и добавлено в скрытое поле формы WordPress, вы можете использовать следующий метод:

Если значение токена безопасности действительно, плагин или тема, выполняющие его, будут продолжать выполняться по назначению. Однако, если токен не прошел проверку, то есть он недействителен, пользователь будет перенаправлен на страницу 403-й ошибки «Запрещено».

Проверка токена, полученного через AJAX-запрос

Функция проверит токен безопасности, и если проверка не будет успешной, код операции не будет выполнен.

Если вы используете не дефолтное название поля для одноразового числа ( _wpnonce или _ajax_nonce ), функции необходимо передать дополнительные параметры.

Надеемся, что информация из данного урока была вам полезной!

Источник

Отладка AnyComment. Частые проблемы пользователей.

Если у вас есть какие-то проблемы с AnyComment, эта статья именно для вас.

В ней, я постараюсь подробно расписать как и что вы можете сделать, чтобы понять источник проблемы и устранить её.

Ошибка «Упс, что-то пошло не так»

Это очень частная проблема после установки плагина.

Происходит она, как правило, из-за чего-то перечисленного ниже:

Объяснение каждого из пунктов будет в таком же порядке.

Хуки в functions.php

Зачастую, веб-разработчики добавляют хуки в functions.php на отключение WP REST API.

Я не буду углубляться в технические термины, опишу REST API самым простым образом.

REST API — это отдельная страница вашего сайта (например, https://вашсайт.ru/wp-json/), куда разработчики могут обращаться, чтобы выполнять определенные действия. Например, если вы используете AnyComment, то при загрузке страницы записи, плагин делает запрос на /wp-json/anycomment/v1/comments чтобы получить n-нное количество комментариев для отображения.

Хуки в functions.php могут выглядеть следующим образом:

Скрипты могут различаться, это лишь пример полученный от одного из пользователей AnyComment, но суть одна — они отключают REST API.

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

Чтобы понять есть у вас проблемы или нет:

Настройки постоянных ссылок

Для корректной работы REST API нужно чтобы была выбрана опция «Название записи» в «Настройки» → «Постоянные ссылки».

Без это опции, REST API будет доступно по следующей ссылке: /?rest_route=/

, а если поставить настройку выше, формат поменяется на /wp-json/.

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

В избежании подобных проблем, вы можете сделать редирект на уровне Apache или Nginx.

Вот как это сделать для Apache:

Добавьте это после области где написаны следующие строки:

Далее откройте ваш сайт, у вас должно показывается похожее, что есть тут.

Плагины оптимизации, безопасности, кеширования

Если вы используете плагины кеширования советую внести файл:

В список исключений. Файл main.min.js — это сердце плагина.

Сделать это стоит по двум причинам:

Кроме этого я советую сделать следующие настройки:

.htaccess и /wp-json/

Если ваш сайт работает на Apache и если вы не уверены в этом, то вероятнее всего это так.

Не отображаются комментарии

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

Отсутствие wp_footer() или wp_head()

«Неверный параметр nonce в cookie»

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

Проблема заключается в том, что плагин кеширует страницу, вместе с nonce. Nonce — это уникальный идентификатор от WordPress, которые помогает делать запросы на сайте более безопасными. Время его жизни не более 24ч и если кеш живет больше, то появляется подобная ошибка.

Для исправления ошибки:

Таким образом каждый 24 часа, nonce страниц будет автоматически обновляться.

«Извини, но комментарии закрыты.»

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

По умолчанию, в WordPress есть опцию по закрытию комментариев для всех записей или страниц или для определенной.

Для записей

Для страниц

Для всего сайта

Плагины

Закрывать комментарии можно также с помощью плагином, например, Clearfy.

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

Если такой опции нет, тогда стоит отказаться от плагина в целом.

Источник

Использование одноразовых чисел (nonces) для защиты WordPress

неверный параметр nonce в cookie что это. Смотреть фото неверный параметр nonce в cookie что это. Смотреть картинку неверный параметр nonce в cookie что это. Картинка про неверный параметр nonce в cookie что это. Фото неверный параметр nonce в cookie что это

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

Одноразовые числа (nonces) – один из лучших способов защитить пользователей от возможных угроз. Они используются для защиты различных пользовательских действий, связанных с плагинами, таких как отправка форм, удаление записи и т.д., что обычно затрагивает базу данных.

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

Почему вам могут понадобиться nonces

Допустим, вы пишете плагин, который позволяет пользователям удалять пост из фронтэнда. Если говорить кратко, механизм удаления записей – это ссылка, которая переводит вас по адресу http://mysite.com/2015/02/12/my-article/?delete=true. Другими словами, ссылка на статью с прикрепленной строкой запроса.

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

Вроде бы все безопасно, верно? В конце концов, вы ведь действительно проверили, является ли пользователь администратором!

Увы, но этого недостаточно. Есть две вещи, которые вы должны проверить перед тем, как каждое действие будет выполнено: права доступа и цель.

Вы проверили, что у пользователя имеются права доступа, но вы не можете быть уверены в том, что пользователь действительно хотел удалить запись.

Справиться с этим помогают случайные числа (nonces). Nonce – это специальный код, который генерируется на момент действия. Если вы используете nonce, ссылка может иметь следующий вид: http://mysite.com/2015/02/12/my-article/?delete=true&_wpnonce=234283223. А поскольку одноразовые данные будут всегда разные, я не смогу отправить вам простую ссылку, поскольку процесс удаления не будет работать без корректных nonce.

Что же такое nonce?

Nonce – это сокращение от «number used once», используются они в криптографии для защиты данных.

В WordPress nonce реализованы несколько иначе, поскольку они не являются числами, а также не используются однократно, однако их цель и их использование во многом похоже. WordPress использует хэш, и nonces могут использоваться более одного раза, у них есть короткое время истечения.

Использование Nonces в WordPress

Процесс состоит из двух шагов: вы генерируете nonce перед выполнением действия (помещая одноразовые числа в ссылку или в виде скрытого поля формы) и проверяете его в целевом назначении. Вам понадобятся некоторые функции для этого.

Добавление nonce к формам

Чтобы добавить nonce к форме, вы должны будете включить скрытое поле с именем и значением. WordPress позволяет это сделать с помощью функции wp_nonce_field().

Вы можете использовать ее с одним параметром (в своем самом простом виде):

Функция создаст для вас два поля, одно из которых будет для nonce, а другое – для реферера, которого WordPress может тоже проверять.

Функция фактически дает вам четыре параметра, чтобы вы могли точно настроить процесс проверки. Первый параметр определяет действие, которое выполняется с nonce. Оно не выводится в поле, оно содержится в хэше. Второй параметр изменяет имя, которое по умолчанию задается как _wpnonce. Третий параметр – логическая переменная, которая проверяет, выбран или нет реферер (по умолчанию true). Наконец, четвертый параметр – это логическая переменная, которая определяет, выводится или нет поле (по умолчанию true).

Важное правило, которое надо соблюдать: имя действия должно быть максимально специфичным (первый параметр). Не надо просто называть его «delete-post», пусть оно называется «delete-post-[ post_ID ]».

На другом конце действия вы должны проверить nonce. Для этого используется параметр action формы. Чтобы проверить nonce, введите простой код:

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

Добавление Nonces к URL-адресам

Иногда вам нужно будет инициировать действие с помощью ссылки, особенно в области администратора. Поскольку ссылки по существу передаются как параметры запроса, вы можете легко прикрепить nonce к ссылкам.

Сделать это можно с помощью функции wp_nonce_url(). Вот как:

В итоге мы получим URL, который будет иметь следующий вид: http://mysite.com?p=553&_mynonce=7278c82a8f3. Как вы можете видеть, это напоминает то, что мы делали с формами; единственное отличие в том, что nonce передаются в URL как GET-параметры.

Вы можете проверить nonce тем же методом, что и раньше. В этот раз давайте добавим соответствующее имя действия с ID и используем GET-переменные:

Заключение

Это было довольно просто, не так ли? И это позволяет добавить неплохой уровень безопасности к вашему продукту.

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

Помните, что одноразовые числа только проверяют цель. Вам по-прежнему надо удостовериться в том, что пользователь также имеет соответствующие права доступа.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *