sessions.inc.php 2.0 KB

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