Nonce verification helps protect your WordPress site from unwanted actions by checking if a request is safe and comes from a trusted source.
Nonce verification in Wordpress
<?php if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) { die( 'Security check failed' ); } // Continue processing safe request ?>
wp_verify_nonce checks if the nonce is valid for the given action.
Always check the nonce before processing sensitive data.
<?php if ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'save_post' ) ) { // Safe to save post } else { // Invalid nonce } ?>
check_ajax_referer to verify nonce in AJAX requests.<?php add_action( 'wp_ajax_my_action', function() { check_ajax_referer( 'my_action', 'security' ); // Process AJAX request safely } ); ?>
<?php if ( ! isset( $_GET['nonce'] ) || ! wp_verify_nonce( $_GET['nonce'], 'delete_item' ) ) { wp_die( 'Invalid nonce' ); } // Proceed with deletion ?>
This example shows a simple form with a nonce field. When the form is submitted, the nonce is checked to make sure the request is safe before processing the username.
<?php // Generate nonce field in a form $nonce = wp_create_nonce( 'submit_form' ); ?> <form method="post"> <input type="hidden" name="form_nonce" value="<?php echo $nonce; ?>"> <input type="text" name="username" placeholder="Enter username"> <button type="submit">Submit</button> </form> <?php if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { if ( ! isset( $_POST['form_nonce'] ) || ! wp_verify_nonce( $_POST['form_nonce'], 'submit_form' ) ) { echo 'Security check failed'; exit; } $username = sanitize_text_field( $_POST['username'] ?? '' ); echo "Hello, $username! Your form was submitted safely."; } ?>
Nonces in WordPress are not true nonces but tokens that expire after 12-24 hours.
Always use wp_create_nonce to generate and wp_verify_nonce to check.
Never trust user input without nonce verification to avoid security risks.
Nonce verification protects your site from unauthorized actions.
Use wp_create_nonce to create and wp_verify_nonce to check nonces.
Always verify nonces before processing form or AJAX data.
Practice
Solution
Step 1: Understand what a nonce is
A nonce is a security token used to verify requests are intentional and authorized.Step 2: Identify nonce purpose in WordPress
WordPress uses nonces to protect against CSRF (Cross-Site Request Forgery) attacks by verifying actions.Final Answer:
To protect against unauthorized actions and CSRF attacks -> Option DQuick Check:
Nonce = Security token for authorization [OK]
- Thinking nonce speeds up performance
- Confusing nonce with user data storage
- Assuming nonce creates backups
Solution
Step 1: Recall nonce creation function
wp_create_nonce() is used to create a nonce, not verify it.Step 2: Identify the correct verification function
wp_verify_nonce() is the official WordPress function to check if a nonce is valid.Final Answer:
wp_verify_nonce() -> Option BQuick Check:
Verify nonce = wp_verify_nonce() [OK]
- Using wp_create_nonce() to verify
- Assuming check_nonce() is a WordPress function
- Mixing function names
if ( ! wp_verify_nonce($_POST['my_nonce'], 'my_action') ) {
echo 'Invalid nonce';
} else {
echo 'Nonce verified';
}Solution
Step 1: Understand wp_verify_nonce behavior
wp_verify_nonce returns false if the nonce is invalid or missing.Step 2: Analyze the if condition
If wp_verify_nonce returns false, the condition !false is true, so 'Invalid nonce' is echoed.Final Answer:
Invalid nonce -> Option CQuick Check:
Invalid nonce triggers message 'Invalid nonce' [OK]
- Assuming invalid nonce prints 'Nonce verified'
- Ignoring the negation (!) in the if condition
- Expecting no output on invalid nonce
if ( wp_verify_nonce($_POST['nonce'], 'save_data') ) {
// process data
} else {
wp_die('Security check failed');
}Solution
Step 1: Understand wp_verify_nonce return values
wp_verify_nonce() returns truthy integer (1 or 2) if valid or previously used, false if invalid/expired.Step 2: Analyze the code logic
if (wp_verify_nonce()) processes if truthy (valid), else wp_die() if falsy (invalid). Correct logic.Final Answer:
No error, code is correct -> Option AQuick Check:
if (wp_verify_nonce()) process else die [OK]
- Thinking negation (!) is required
- Assuming wp_die() is wrong here
- Changing action string unnecessarily
Solution
Step 1: Understand nonce creation and usage
Nonce must be created in PHP using wp_create_nonce with an action name.Step 2: Verify nonce on AJAX request
Nonce sent via AJAX (usually POST) must be verified in PHP using wp_verify_nonce with the same action.Final Answer:
Create nonce with wp_create_nonce('ajax_action') in PHP; send it via AJAX; verify with wp_verify_nonce($_POST['nonce'], 'ajax_action') -> Option AQuick Check:
Nonce create in PHP, verify in PHP with same action [OK]
- Trying to create nonce in JavaScript
- Mixing up create and verify functions
- Skipping verification on AJAX requests
Ready to prove it?
Pass the test and this pattern moves unknown
