Intereting Posts
Как организовать фотографии для нескольких галерей? Страница списков категорий foreach Paging Упорядочить пользовательские поля с помощью перетаскивания? Какие настройки / параметры сохраняются на основе темы и как это влияет на переключение тем? Ограниченный лимит памяти WordPress Не удалось установить сериализованный массив по умолчанию, используя dbdelta () WordPress: категория страницы не для сообщений after_setup_theme всегда запускается Как сбрасывать несколько captcha на той же странице с контактной формой 7? Сортировка результатов поиска по пользовательскому полю Как устранить проблему, почему TinyMCE не загружает пользовательские плагины в визуальный редактор? Что может быть причиной того, что категория будет отображаться как заголовок сообщения в теге заголовка? Запуск сценария jquery после короткого кода Получить элемент поиска только на 404 Переменные ссылочные типы сообщений

Проверка безопасности в meta_box save неохотно?

Например, в этом учебнике код, предлагаемый при сохранении метаданных, является

/* Verify the nonce before proceeding. */ if ( !isset( $_POST['smashing_post_class_nonce'] ) || !wp_verify_nonce( $_POST['smashing_post_class_nonce'], basename( __FILE__ ) ) ) return $post_id; /* Get the post type object. */ $post_type = get_post_type_object( $post->post_type ); /* Check if the current user has permission to edit the post. */ if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) return $post_id; 

Проверка user role nonce и user role кажется неохотой, кажется, что они подключаются к save_post , что является почти последней строкой в ​​функции wp_insert_post , WordPress должен уже выполнить необходимые проверки, правильно?

Так что я могу их безопасно удалить?

Solutions Collecting From Web of "Проверка безопасности в meta_box save неохотно?"

Нет, не совсем. Вы предполагаете, что функция, которая называется wp_insert_post() , уже выполнила эти проверки. Но wp_insert_post() может использоваться и на других страницах, а не только на странице редактирования, плагинами или даже темами (многие из них с дырками безопасности).

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


Хорошо, я редактирую ответ, потому что комментарий комментария будет слишком длинным.

Если плагин выставляет wp_insert_post, будет не только мое новое настраиваемое поле, но и все почтовые поля будут взломаны. (опять же, это ошибка в плагине) Итак, я действительно не вижу, что проверка моего собственного настраиваемого поля может привести к дополнительной безопасности

Но он будет «взломан» с помощью вашего кода. Подумайте о быстрой форме сообщения на домашней странице приборной панели. У него нет полей ввода для вашей почты, не так ли? При представлении wp_insert_post -> save_post и если $_POST содержит ваши мета-поля (легко отредактировать исходный код и добавить их), они будут сохранены кодом вашего мета-кода. По сути, если вы не выполняете проверки nonce, вы можете изменить свои метаполя из любой формы WordPress, которая включает редактирование сообщений, а не только ту, к которой вы привязали свои пользовательские поля ввода. Это то, что вы хотите?

Я НЕ создаю новое действие, поэтому, если код ядра WordPress позволяет вызывать wp_insert_post без проверки nonce, это ошибка в WP. (Как видите, все они называются check_admin_referer в post.php.

Цель wp_insert_post – вставлять сообщения, а не проверять, откуда wp_insert_post данные. Однако я согласен с тем, что действие save_post было плохо помещено. Такие функции не должны запускать действия и фильтры вообще. Вместо этого действие должно было быть уволено каждым обработчиком представления формы. Помимо того факта, что это действие вводит больше несоответствий в WP API, оно также облегчает эксплойты …