What are the best practices for handling form submissions in PHP to prevent CSRF attacks and unauthorized data manipulation?

CSRF attacks can be prevented by including a unique token in each form submission and verifying it on the server side. Additionally, data manipulation can be prevented by validating and sanitizing all incoming form data before processing it. Implementing these best practices will help secure your PHP forms against unauthorized access and manipulation.

// Generate a unique CSRF token and store it in the session
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Add the CSRF token to the form as a hidden field
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// Verify the CSRF token on form submission
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    // Handle invalid CSRF token
    die('CSRF token validation failed');
}

// Validate and sanitize form data before processing
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

// Process the form data
// ...