csrf.php 659 B

12345678910111213141516171819202122232425262728293031323334353637
  1. <?php
  2. /**
  3. * lib/csrf.php
  4. *
  5. * CSRF protection functions.
  6. */
  7. /**
  8. * Generate CSRF token
  9. */
  10. function generateCsrfToken(): string
  11. {
  12. if (empty($_SESSION['csrf_token'])) {
  13. $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
  14. }
  15. return $_SESSION['csrf_token'];
  16. }
  17. /**
  18. * Verify CSRF token
  19. */
  20. function verifyCsrfToken(string $token): bool
  21. {
  22. if (empty($_SESSION['csrf_token']) || empty($token)) {
  23. return false;
  24. }
  25. return hash_equals($_SESSION['csrf_token'], $token);
  26. }
  27. /**
  28. * Regenerate CSRF token (call after successful form submission)
  29. */
  30. function regenerateCsrfToken(): void
  31. {
  32. unset($_SESSION['csrf_token']);
  33. }
  34. ?>