search
HomeCMS TutorialWordPressWhat Are WordPress Nonces?

WordPress Security: Use Nonce to protect themes and plugin code

Protecting the security of WordPress themes or plug-in code is crucial and can effectively prevent attacks from malicious users. We've covered before how to clean, escape, and validate form data in WordPress, and how to use VIP scanner to improve the quality of WordPress themes. Today, we will explore how Nonce (one-time digital) can help keep WordPress themes and plugins secure.

Key Points

  • WordPress Nonce, or "one-time use number", is a unique security token used to enhance the security of WordPress websites by verifying user requests and preventing malicious attempts. They are particularly useful in preventing cross-site request forgery (CSRF) attacks.
  • Nonce works by generating a unique token for each user session, form submission, or AJAX request. This token is then verified when processing the request, and if it does not match, the request is rejected. This makes it difficult for attackers to predict or abuse the token.
  • Creating Nonce in WordPress is achieved by using the WordPress function wp_create_nonce(), which accepts a single string parameter representing the operation to be protected. Verification Nonce is done using the wp_verify_nonce() function, which accepts two parameters: the Nonce to be verified and the associated operation.
  • Nonce can be used for AJAX requests in WordPress, adding an additional layer of security to prevent CSRF attacks. Nonce is also user-specific, providing an additional layer of security by ensuring that Nonce created for one user is invalid for another.

What is WordPress Nonce?

WordPress Nonce is defined as:

…A "one-time use number" to help protect URLs and forms from certain types of abuse (malicious or otherwise). https://www.php.cn/link/c5af1dfde10402285102771ad64b3dac

While in WordPress, Nonce is not a technically number (it is a hash of letters and numbers), it does help prevent malicious users from running actions.

WordPress Nonce's work is divided into two parts:

  • Create Nonce (hash value), submit it through form or action, and
  • Verify Nonce, then accept form data or run the action.

For example, when you delete a post in the WordPress admin screen, you will notice that the URL contains a _wpnonce parameter:

https://www.php.cn/link/18175d262a01ebf04bc03e38e48e3ffc

The routine to delete a post will check if post 542 has a Nonce value of a03ac85772 before deleting the post. If Nonce does not exist or does not match the expected value, the post will not be deleted.

This prevents malicious users from potentially deleting large numbers of posts. For example, the following will not work because Nonce belongs to post ID 542:

https://www.php.cn/link/322d830da1130169fb4ca1c7543799d0 https://www.php.cn/link/dd4143061640d55fb312dd0ce8afa76e https://www.php.cn/link/9e0f9113b44003201076a9fade1b72d8

What Are WordPress Nonces?

Now let's see how to implement WordPress Nonce in a plugin.

Set up our WordPress plugin

Let's start with a basic plugin with its own settings screen. The settings screen has a field that can be submitted and saved in the WordPress options table.

Enter the following code into a new file in wp-content/plugins/implementing-wordpress-nonces/implementing-wordpress-nonces.php:

// ... (插件代码,与原文相同) ...

Activate the plugin via WordPress Management> plugin screen and you will see a new Nonces menu item:

What Are WordPress Nonces?

Click this item and you will be taken to the settings screen, with only one field:

What Are WordPress Nonces?

Enter any value, click "Save", if everything works, you will see the confirmation information and the value you just entered:

What Are WordPress Nonces?

Demonstrate security vulnerability

Enter the following URL into your web browser address bar (replace the domain name with where you installed WordPress):

https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8

Attention what happened? The value is simply saved as abc, just directly access the URL and log in to WordPress:

What Are WordPress Nonces?

While we can use $_POST in our code instead of $_REQUEST (we use $_REQUEST to demonstrate security issues more easily), this doesn't help - malicious users can still use themselves or induce you to click on the link Lets you send a POST request to this screen, resulting in a change in option values.

This is called cross-site request forgery (or CSRF). Malicious websites, emails, applications, etc. will cause the user's web browser to perform unnecessary operations.

We will now create and verify WordPress Nonce to prevent this attack from becoming possible.

Protect our plug-ins with Nonce

As mentioned earlier, this process is divided into two steps: First, we need to create a Nonce that will be submitted with our form. Second, we need to verify the Nonce when submitting the form.

To create a Nonce field in our form, we can use wp_nonce_field():

Get or show Nonce hidden form fields... Used to verify that the content of the form request comes from the current site, not elsewhere...

Add the following code above our input button:

// ... (插件代码,与原文相同) ...

wp_nonce_field Accept four parameters-the first two are the most important:

  • $action: This determines the specific operation we are running and should be unique. It is best to use the plugin name as the prefix for the operation, as there may be multiple operations running. In this case, we are saving something, so we use implementing_wordpress_nonces_save
  • $name: This determines the name of the hidden field created by this function. As mentioned above, we have used the plugin name as its prefix, so we named it implementing_wordpress_nonces_nonce

If we reload the settings screen, change our value and click Save, you will notice that the value will still change. We now need to implement the checking of the submitted Nonce field, using wp_verify_nonce( $name, $action ):

Verify that Nonce is correct and has not expired relative to the specified operation. This function is used to verify the Nonce sent in the current request, usually accessed via the $_REQUEST PHP variable.

Replace the "Save Settings" part of the admin_screen() function of our plugin with the following code:

wp_nonce_field( 'implementing_wordpress_nonces_save', 'implementing_wordpress_nonces_nonce' );

This code performs the following operations:

  • First, it checks if we have submitted something.
  • Then it checks if our Nonce field exists and, if so, try to verify the value of Nonce based on the action we expect.
  • If the check passes, update the options.
  • If the check fails, we will throw a 403 error with the message "Invalid Nonce specified".

To make sure our Nonce is being created and verified, let's try again to access our "malicious" direct URL:

https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8.

>

If our Nonce is implemented and is being verified, you will see an "Invalid Nonce Specification" notification:

What Are WordPress Nonces?

...(The rest is the same as the original text, but the language and expression are adjusted in detail to keep the original intention unchanged)....

The above is the detailed content of What Are WordPress Nonces?. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to easily move your blog from WordPress.com to WordPress.orgHow to easily move your blog from WordPress.com to WordPress.orgApr 18, 2025 am 11:33 AM

Do you want to move your blog from WordPress.com to WordPress.org? Many beginners start with WordPress.com but quickly realize their limitations and want to switch to the self-hosted WordPress.org platform. In this step-by-step guide, we will show you how to properly move your blog from WordPress.com to WordPress.org. Why migrate from WordPress.com to WordPress.org? WordPress.com allows anyone to create an account

How to Automate WordPress and Social Media with IFTTT (and more)How to Automate WordPress and Social Media with IFTTT (and more)Apr 18, 2025 am 11:27 AM

Are you looking for ways to automate your WordPress website and social media accounts? With automation, you will be able to automatically share your WordPress blog posts or updates on Facebook, Twitter, LinkedIn, Instagram and more. In this article, we will show you how to easily automate WordPress and social media using IFTTT, Zapier, and Uncanny Automator. Why Automate WordPress and Social Media? Automate your WordPre

How to Fix Custom Menu Item Limits in WordPressHow to Fix Custom Menu Item Limits in WordPressApr 18, 2025 am 11:18 AM

Just a few days ago, one of our users reported an unusual problem. The problem is that he reaches the limit of custom menu items. Any content he saves after reaching the menu item limit will not be saved at all. We've never heard of this issue, so we decided to give it a try on our local installation. More than 200 menu items were created and saved. The effect is very good. Move 100 items to the drop-down list and save them very well. Then we knew it had to do with the server. After further research, it seems that many others have encountered the same problem. After digging deeper, we found a trac ticket ( #14134 ) that highlighted this issue. Read very

How to add custom metafields to custom classification in WordPressHow to add custom metafields to custom classification in WordPressApr 18, 2025 am 11:11 AM

Do you need to add custom metafields to custom taxonomy in WordPress? Custom taxonomy allows you to organize content besides categories and tags. Sometimes it is useful to add other fields to describe them. In this article, we will show you how to add other metafields to the taxonomy they create. When should custom metafields be added to custom taxonomy? When you create new content on your WordPress site, you can organize it using two default taxonomy (category and tag). Some websites benefit from the use of custom taxonomy. These allow you to sort content in other ways. For example,

How to Remotely Publish to WordPress using Windows Live WriterHow to Remotely Publish to WordPress using Windows Live WriterApr 18, 2025 am 11:02 AM

Windows live writer is a versatile tool that allows you to post posts directly from your desktop to your WordPress blog. This means you don't need to log in to the WordPress admin panel to update your blog at all. In this tutorial, I will show you how to enable desktop publishing for your WordPress blog using Windows Live Writer. How to set up Windows Live Writer on WordPress Step 1: To use Windows Live Writer in WordPr

How to Fix White Text and Missing Buttons in WordPress Visual EditorHow to Fix White Text and Missing Buttons in WordPress Visual EditorApr 18, 2025 am 10:52 AM

Recently, one of our users reported a very strange installation problem. When writing a post, they can’t see anything they write. Because the text in the post editor is white. What's more, all the visual editor buttons are missing, and the ability to switch from visual to HTML doesn't work either. In this article, we will show you how to fix the white text and missing button issues in the WordPress visual editor. Be a Beginner Note: If you are looking for hidden buttons that may be seen in screenshots of other websites, you may be looking for a kitchen sink. You have to click on the kitchen sink icon to see other options such as underline, copy from word, etc.

How to display avatar in user email in WordPressHow to display avatar in user email in WordPressApr 18, 2025 am 10:51 AM

Do you want to display avatars in user emails in WordPress? Gravatar is a network service that connects a user's email address to an online avatar. WordPress automatically displays visitors’ profile pictures in the comments section, but you may also want to add them to other areas of the site. In this article, we will show you how to display avatars in user emails in WordPress. What is Gravatar and why should I display it? Gravatar stands for globally recognized avatars, which allows people to link images to their email addresses. If the website supports

How to change the default media upload location in WordPressHow to change the default media upload location in WordPressApr 18, 2025 am 10:47 AM

Do you want to change the default media upload location in WordPress? Moving media files to other folders can improve website speed and performance and help you create backups faster. It also gives you the freedom to organize your files in the way that suits you best. In this article, we will show you how to change the default media upload location in WordPress. Why change the default media upload location? By default, WordPress stores all images and other media files in the /wp-content/uploads/ folder. In this folder you will find children of different years and months

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment