WPZylos Security

Security primitives: nonces, capabilities, sanitization, rate limiting, and secure uploads.

What You Get

  • Nonce — CSRF protection with context-prefixed actions
  • Gate — Capability checking and authorization
  • Sanitizer — Field-level input sanitization
  • RateLimiter — Request throttling per user/IP
  • UploadSecurity — Secure file upload handling

Quick Start

use WPZylos\Framework\Security\Nonce;
use WPZylos\Framework\Security\Gate;
use WPZylos\Framework\Security\Sanitizer;

// Nonce verification
$nonce = new Nonce($context);
if (!$nonce->verify($_POST['_nonce'], 'save_settings')) {
    wp_die('Invalid request');
}

// Capability check
$gate = new Gate();
if (!$gate->can('manage_options')) {
    wp_die('Unauthorized');
}

// Sanitization
$sanitizer = new Sanitizer();
$title = $sanitizer->text($_POST['title']);
$email = $sanitizer->email($_POST['email']);

Documentation

Common Pitfalls

1. Blanket Sanitization

Bad: Wrong: Sanitize entire arrays

$data = array_map('sanitize_text_field', $_POST);

Good: Correct: Field-level sanitization

$title = $sanitizer->text($_POST['title']);
$content = $sanitizer->html($_POST['content']);

2. Missing Output Escaping

Sanitization is for input. Escaping is for output:

// Sanitize on input
$title = $sanitizer->text($_POST['title']);

// Escape on output
echo esc_html($title);

3. Hardcoded Nonce Actions

Bad: Collision with other plugins:

wp_verify_nonce($token, 'save');  // Generic action

Good: Prefixed via context:

$nonce->verify($token, 'save');  // myplugin_save