sessions.inc.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. // Start session
  3. ini_set("session.cookie_httponly", 1);
  4. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
  5. strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == "https") {
  6. ini_set("session.cookie_secure", 1);
  7. $IS_HTTPS = true;
  8. }
  9. elseif (isset($_SERVER['HTTPS'])) {
  10. ini_set("session.cookie_secure", 1);
  11. $IS_HTTPS = true;
  12. }
  13. else {
  14. $IS_HTTPS = false;
  15. }
  16. session_set_cookie_params($SESSION_LIFETIME, '/', '', $IS_HTTPS, true);
  17. session_start();
  18. if (!isset($_SESSION['CSRF']['TOKEN'])) {
  19. $_SESSION['CSRF']['TOKEN'] = bin2hex(random_bytes(32));
  20. }
  21. // Set session UA
  22. if (!isset($_SESSION['SESS_REMOTE_UA'])) {
  23. $_SESSION['SESS_REMOTE_UA'] = $_SERVER['HTTP_USER_AGENT'];
  24. }
  25. // Check session
  26. function session_check() {
  27. if (!isset($_SESSION['SESS_REMOTE_UA'])) {
  28. return false;
  29. }
  30. if ($_SESSION['SESS_REMOTE_UA'] != $_SERVER['HTTP_USER_AGENT']) {
  31. return false;
  32. }
  33. if (!empty($_POST)) {
  34. if ($_SESSION['CSRF']['TOKEN'] != $_POST['csrf_token']) {
  35. return false;
  36. }
  37. $_SESSION['CSRF']['TOKEN'] = bin2hex(random_bytes(32));
  38. $_SESSION['CSRF']['TIME'] = time();
  39. }
  40. return true;
  41. }
  42. if (isset($_SESSION['mailcow_cc_role']) && session_check() === false) {
  43. $_SESSION['return'] = array(
  44. 'type' => 'warning',
  45. 'msg' => 'Form token invalid or timed out'
  46. );
  47. $_POST = array();
  48. }
  49. // Handle logouts
  50. if (isset($_POST["logout"])) {
  51. if (isset($_SESSION["dual-login"])) {
  52. $_SESSION["mailcow_cc_username"] = $_SESSION["dual-login"]["username"];
  53. $_SESSION["mailcow_cc_role"] = $_SESSION["dual-login"]["role"];
  54. unset($_SESSION["dual-login"]);
  55. }
  56. else {
  57. session_regenerate_id(true);
  58. session_unset();
  59. session_destroy();
  60. session_write_close();
  61. header("Location: /");
  62. }
  63. }