PHP Security best practices: What to avoid and how to stay safe

Roman Huliak
3 min readFeb 11, 2025

--

PHP is a widely used scripting language for web development, but it is often targeted by attackers due to misconfigurations and insecure coding practices. Below are some essential security best practices to follow while developing PHP applications.

1. Secure Session Management

  • Do not store sensitive information in cookies — Instead, use PHP sessions as they are stored server-side.
  • Regenerate session IDs — Use session_regenerate_id(true); after login to prevent session fixation.
  • Restrict session runtime — Configure session.gc_maxlifetime to set the expiration time for inactive sessions.
  • Set session path and name — Use session_save_path('/secure/path') and session_name('customSessionName').
  • Use SSL — Enforce HTTPS using session_set_cookie_params(['Secure' => true]);.

2. Preventing File Inclusion Vulnerabilities

  • Avoid .inc files – Do not store PHP code inside .inc files as they might be exposed if the server misconfigures.
  • Use absolute paths — Always reference files with absolute paths rather than dynamic or relative paths.
  • Restrict file access — Use open_basedir in php.ini to restrict file access.

3. Protecting Against XSS (Cross-Site Scripting)

  • Escape user input — Always sanitize output using:
htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
htmlentities($input, ENT_QUOTES, 'UTF-8');
strip_tags($input);
  • Use Content Security Policy (CSP) — Implement HTTP headers to mitigate XSS attacks.

4. Preventing CSRF (Cross-Site Request Forgery)

  • Verify HTTP referer — Check $_SERVER['HTTP_REFERER'], but do not solely rely on it.
  • Use CSRF tokens — Generate and validate a CSRF token stored in the session.
  • Re-authenticate for sensitive operations — Require users to re-enter passwords before critical actions.

5. Database Security and SQL Injection Prevention

  • Use prepared statements — Avoid direct SQL queries; instead, use:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
  • Validate data types — Ensure expected types using:
filter_var($input, FILTER_VALIDATE_INT);
ctype_digit($input);
  • Avoid using eval() – This function can execute malicious code if improperly handled.

6. Error Handling & Logging

  • Disable error display in production — Set in php.ini:
display_errors = Off
log_errors = On
  • Log errors securely — Store logs in a non-public location and monitor them regularly.

7. Authentication & Access Control

  • Use strong passwords and hashing — Hash passwords with password_hash() and verify with password_verify().
  • Avoid common usernames — Do not use admin, root, or other standard usernames.
  • Restrict admin access — Do not place admin panels in /admin/, use a unique path.

8. Email & Form Security

  • Validate email input — Use:
filter_var($email, FILTER_VALIDATE_EMAIL);
  • Prevent spam submissions — Use CAPTCHA and honeypot techniques.

9. Secure Configuration & Miscellaneous Best Practices

  • Disable register_globals – Ensure register_globals = Off in php.ini.
  • Use $_GET and $_POST instead of $_REQUEST.
  • Enable E_ALL during development but disable it in production.
  • Use HTTPS — Enforce SSL/TLS to encrypt data transmission.
  • Use open_basedir and safe_mode on shared hosting.

By implementing these best practices, you can significantly reduce security vulnerabilities in your PHP applications. Always keep your PHP version up to date and stay informed about security advisories.

Conclusion

PHP security is a continuous process that requires vigilance and adherence to best practices. By following the guidelines above, you can significantly reduce the risk of vulnerabilities in your PHP applications. Always stay updated with the latest security trends and regularly audit your code for potential issues.

Remember, security is not a one-time task but an ongoing commitment. Stay safe!

--

--

Roman Huliak
Roman Huliak

Written by Roman Huliak

Full Stack Developer with 15 years of experience in ERP systems, skilled in leadership, analysis, and end-to-end development.

No responses yet