Неверный параметр nonce в cookie как исправить
WordPress.org
Русский
Ошибка nonce_failure
Здравствуйте, только начинаю разбираться с wordpress, поэтому вопрос может показаться глупым. Помогите пожалуйста решить проблему. В коде темы пытаюсь изменить цвет текста(почему-то не предусмотрено в теме), но вылазит во такая ошибка «nonce_failure». Как её исправить и какая информация нужна вам для помощь? Заранее спасибо!
Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
Вы решили отказаться от обновлений темы? Со всеми вытекающими неприятностями? Смелое решение для новичка…..
какая информация нужна вам для помощь?
как минимум заполнить поле «страница с которой нужна помощь»
Но только не страница из админки, а та, где вы пытаетесь цвет текста менять.
Во первых — не нужно «пинговать по нику». Это не приятно и осуждается правилами форума.
Во вторых — о том что речь идет о цвете текста меню и об адресе, где на него нужно посмотреть — это нужно догадаться? Извините, штатные экстрасенсы уволились пару лет назад со словами «Да у вас тут столько работы, что и тройной оклад не поможет»
Нет, не нужно искать файл, где эти стили можно исправить.
Нужно добавить свои стили в:
1. style.css дочерней темы
2. Внешний вид — настройки — дополнительный стили
3. В специальный плагин пользовательских стилей.
Спасибо большое за помощь и извините пожалуйста за ошибки, буду исправляться.
WP Magazine
Про WordPress на русском языке
Одноразовые числа nonces в WordPress и их влияние на безопасность
Внутри ядра WordPress «скрыто» множество полезных инструментов. Один из них — это токены безопасности или «nonces», которые позволяют защититься от некоторых видов неправомерного или злоумышленного использования возможностей сайта.
Их не видно в интерфейсе страниц, но они широко используются в административной части WordPress. В рамках данной статьи будут рассмотрены примеры использования, логика создания и работы с nonces, которую возможно полностью заменить своей собственной системой.
Nonce. Number Used Once
Nonce расшифровывается как «число, используемое один раз» (number used once). Эти числа или «токены» состоят из цифр и букв, являются уникальными для каждого пользователя и для каждого действия, и имеют ограниченное «время жизни», после которого становятся недействительными.
Несмотря на говорящую фразу «число, используемое один раз», в действительности это не совсем так. Nonce генерируется для конкретного пользователя и действия, поэтому будет неизменной до тех пор, пока жизненный цикл не будет закончен (примеры генерации и описание жизненного цикла будут рассмотрены ниже).
Одноразовыми же они называются, потому что предназначены для тех же целей, что и настоящие одноразовые токены. Например, nonce помогают защититься от некоторых типов атак, включая межсайтовую подделку запросов (CSRF), но не защищают от атак повторного воспроизведения (replay atack), потому что nonce не проверяются на использование лишь единожды.
В качестве примера того, как nonce используется, рассмотрим некую административную страницу, на которой отображается ссылка для удаления записи с идентификатором 123. Можно заметить, что nonce содержится в конце адреса.
Если кто-нибудь попытается изменить адрес, чтобы удалить запись с идентификатором 456, то число nonce будет недействительным и попытка удалить другую запись не увенчается успехом.
Неверное число nonce заставит WordPress выдать в ответ браузеру «403 Forbidden» с сообщением об ошибке «Вы уверены, что хотите сделать это?».
Вы уверены, что вы хотите сделать это?
” data-medium-file=”https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays-300×100.png” data-large-file=”https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays-1024×340.png” loading=”lazy” src=”https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays.png” alt=”Вы уверены, что вы хотите сделать это?” width=”766″ height=”254″ srcset=”https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays.png 1028w, https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays-300×100.png 300w, https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays-1024×340.png 1024w, https://wpmag.ru/wp-content/uploads/2015/02/wordpress-nonce-ays-768×255.png 768w” sizes=”(max-width: 1028px) 100vw, 1028px” />
Вы уверены, что вы хотите сделать это?
Создание чисел nonce
В WordPress уже заранее есть необходимый функционал для создания и добавления nonce в качестве аргумента URL или скрытого поля внутри формы. Есть несколько базовых функций и для работы в каких-то иных ситуациях.
Nonce, используемые в AJAX-запросах, обычно добавляются в скрытые поля формы, откуда к ним может получить доступ JavaScript. Стоит заметить, что nonce уникальна для текущей сессии пользователя, поэтому, если входить или выходить асинхронно, nonce на странице станут недействительными.
Генерация nonce
Иногда в качестве значений установлена строчка «впишите сюда уникальную фразу». В этом случае необходимо воспользоваться API для создания секретных ключей, заменив подобные значения по умолчанию. После этой процедуры все пароли пользователей останутся действительными, но им прийдется снова выполнить вход.
Где хранятся nonce
Система генерации чисел nonce не сохраняет их в базе данных, как может показаться на первый взгляд. В момент проверки токен генерируется заново и сравнивается с тем, который был получен.
Nonce в качестве аргумента URL
Числа nonce внутри формы
По умолчанию, функция выведет два скрытых поля. Первое содержит секретное число nonce. Внутри второго поля — текущий URL (referrer). Например:
При таком вызове в форму выведутся следующие скрытые поля:
Как и в предыдущем примере, для максимальной безопасности строчку, описывающую действие, следует задавать максимально конкретно.
Кроме этого можно задать другое имя для поля nonce, не выводить поле с referrer и указать, что результат необходимо вернуть, а не выводить. Для подробностей использования смотрите страницу описания функции wp_nonce_field() в кодексе WordPress.
Нестандартное использование nonce
Не забывайте, что и здесь для максимальной безопасности в качестве аргумента необходимо передавать строчку, как можно более точно описывающую совершаемое действие.
Проверка действительности чисел nonce
Для всех трех способов внедрения nonce, описанных в предыдущей части, есть функции, с помощью которых можно выполнить проверку действительность токена.
Проверка nonce, полученной с административной страницы
Функция проверит поля nonce и referrer и если проверка не будет успешной, то произойдет обычное действие — прекращение выполнения кода с ответом 403 и сообщением об ошибке.
Если вы использовали название поля для nonce отличное от того, что задается по умолчанию, необходимо указать его вторым аргументом:
Учтите, что данная функция работает только в рамках административной панели WordPress, и не подойдет для использования в формах, публикуемых на лицевой части сайта. Если требуется проверить действительность кодов nonce на лицевой части, используйте функцию wp_verify_nonce() (см. ниже).
Проверка nonce, полученной через AJAX-запрос
Функция проверит nonce и в случае, если проверка не будет успешной, завершит исполнение кода. Учтите, что при таком подходе поле referrer не учитывается, но данная функция убедится в том, что запрос действительно пришел по AJAX.
Если вы используете название поля для nonce, отличное от того, что задается по умолчанию ( _wpnonce или _ajax_nonce ), необходимо передать дополнительные параметры. Подробности на странице функции check_ajax_referer() в кодексе WordPress.
Проверка nonce, полученной другими способами
Изменение системы nonce в WordPress
Например, для изменения логики проверки АJAX-запросов, необходимо написать свою собственную функцию check_ajax_referrer() в плагине. Список функций и фильтров для работы с 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 в качестве события:
Изменение внешнего вида страницы с ошибкой
Перехватив фильтр, можно указать собственную функцию, которая сможет отдавать страницу с совершенно другим внешним видом.
В заключение следует отметить, что если вы разрабатываете темы и особенно плагины для WordPress, не забывайте использовать одноразовые числа nonce во всех интерфейсах, поскольку их отсутствие может легко привести к взлому сайтов ваших пользователей.
Если у вас остались вопросы по системе токенов в WordPress, оставьте комментарий и мы обязательно вам ответим.
Отладка 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.
Поэтому попробуйте деактивировать разные плагины оптимизаторы. Если проблема пропала, тогда стоит найти опцию связанную и отключить ее, чтобы не мешала работе комментариев.
Если такой опции нет, тогда стоит отказаться от плагина в целом.
Chrome 80, как декодировать печенье
У меня был рабочий скрипт для открытия и расшифровки файлов cookie Google Chrome, который выглядел следующим образом:
Похоже, что после обновления 80 это уже не верное решение.
Согласно этому сообщению в блоге https://blog.nirsoft.net/2020/02/19/tools-update-new-encryption-chrome-chromium-version-80/ кажется, что мне нужно CryptUnprotectData на encrypted_key из файла Local State, чем-то расшифровать cookie, используя расшифрованный ключ.
Для первой части я получил мой encrypted_key
Затем я попытался расшифровать его
Decrypted_key = win32crypt.CryptUnprotectData (encrypted_key, None, None, None, 0)
И получил исключение:
И я не могу понять, как это исправить
Также для второй части шифрования кажется, что я должен использовать pycryptodome, что-то вроде этого фрагмента:
Но я не могу понять, где я должен получить значение nonce
Может кто-нибудь объяснить, как правильно расшифровывать куки Chrome?
2 ответа
Шифрование файлов cookie выполняется с помощью AES-256 в режим GCM. Это аутентифицированное шифрование, которое гарантирует конфиденциальность и подлинность / целостность. Во время шифрования генерируется тег аутентификации, который используется для проверки целостности во время дешифрования. Режим GCM основан на режиме CTR и использует IV (nonce). В дополнение к 32-байтовому ключу для расшифровки требуются одноразовый номер и тег аутентификации.
Зашифрованные данные начинаются с кодировки ASCII v10 (т. Е. 0x763130 ), за которой следует одноразовый номер 12 байтов, фактический зашифрованный текст и, наконец, тег аутентификации 16 байтов. Отдельные компоненты можно разделить следующим образом:
Где data содержит зашифрованные данные. Само дешифрование выполняется с использованием PyCryptodome с :
Возможно, вы скопировали значение зашифрованного ключа DPAPI из одной учетной записи пользователя в Windows и пытаетесь вызвать CryptUnprotectData WinAPI, когда вы вошли в систему как другой пользователь. Это не будет работать, по природе DPAPI.
Написание своего плагина для WordPress. Часть 4. Защита плагина с помощью nonce
В предыдущих частях были описаны создание страницы плагина в админпанели и работа с базой данных с привязкой к этой странице. Теперь рассмотрим не сложный, но при этом необходимый механизм защиты плагина от несанкционированного использования с помощью nonce.
Необходимость защиты
Для того чтобы осознать необходимость защиты достаточно трезво взглянуть на код функции удаления устаревших редакций из базы данных, который был приведён в 3й части.
Эта функция проверяет только установку флажка и ничего больше. Таким образом, открывается возможность выполнить удаление редакций, минуя пользовательский интерфейс плагина и даже авторизацию. Что недопустимо.
Защита с помощью nonce
К счастью, WordPress уже содержит механизм для защиты от подобных ситуаций под названием nonce.
Его суть состоит в том, что перед выполнением какого либо действия генерируется некий псевдослучайный идентификатор. Причём генерация выполняется только для данного конкретного пользователя и только в текущем контексте. Также nonce имеют ограниченное «время жизни», по истечении которого они становятся не действительными.
Обычно nonce используются в виде скрытых полей HTML форм или включаются в URL адреса.
Для того чтобы защитить наш плагин с помощью nonce добавим в HTML форму на его странице в админ панели скрытое поле с помощью функции wp_nonce_field.
Первый параметр функции – название действия, второй параметр – имя самого nonce. Если имя nonce не задано,WordPress присвоит стандартное значение. Однако этого лучше избегать.
В результате, внутри формы появятся скрытые поля с nonce.
Далее необходимо выполнить проверку nonce в функции ClearRevisions.
Для примера выполним её наиболее простым и универсальным способом. С помощью функции WordPress wp_verify_nonce (более подробно особенности защиты пользовательского интерфейса работающего в админпанели будут рассмотрены ниже). Для этого необходимо предварительно подключить файл pluggable.php из директории wp-includes.
Так работает защита HTML форм. Теперь для того чтобы удалить ненужные редакции из базы данных необходимо предварительно авторизоваться и перейти на страницу плагина в админ панели.
Защита URL строится во многом аналогичным образом. Отличие только в том, что nonse включается не в HTML форму, а в URL страницы при помощи функции wp_nonce_url.
Эта функция принимает три параметра: исходный URL, название действия, имя самого nonce. А, возвращает URL, который содержит в себе параметр nonce.
Особенности защиты страницы плагина в админпанели
Проверять nonce, которые были созданы на страницах админпанели можно двумя способами.
Отличие между ними в том, что функция check_admin_referer дополнительно проверяет ещё и HTTP referer. Это предотвращает передачу даже корректного nonce со страницы, которая не относится к админпанели WordPress. Тем самым обеспечивается более высокий уровень безопасности.
Поэтому, для плагинов предназначенных для работы в составе открытых интернет ресурсов данный способ является наиболее предпочтительным.
Кроме того при его использовании значительно сокращается объём кода. Если проверка nonce завершится неудачей, функция check_admin_referer сама выдаст сообщение об ошибке.
Перепишем приведённый выше пример с применением второго способа.
Функция check_admin_referer принимает два параметра: название действия и имя nonce (если используется стандартное имя параметр не обязателен).