공격자가 정상적인 사용자의 세션 ID를 탈취하여 해당 사용자로 위장하는 공격 기법입니다.
session.use_only_cookies = 1
session.cookie_httponly = 1
session.cookie_secure = 1
session.cookie_samesite = "Strict"
session.gc_maxlifetime = 3600
ini_set('session.cookie_httponly', 1);
session_start([
'cookie_secure' => true,
'cookie_httponly' => true,
'cookie_samesite' => 'Strict'
]);
session_start();
if(!isset($_SESSION['created'])) {
session_regenerate_id(true);
$_SESSION['created'] = time();
}
function checkSessionIP() {
if (!isset($_SESSION['ip'])) {
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
return $_SESSION['ip'] === $_SERVER['REMOTE_ADDR'];
}
function checkUserAgent() {
if (!isset($_SESSION['user_agent'])) {
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
}
return $_SESSION['user_agent'] === $_SERVER['HTTP_USER_AGENT'];
}
function checkSessionExpiry() {
$max_lifetime = 3600; // 1시간
if (isset($_SESSION['last_activity']) &&
(time() - $_SESSION['last_activity'] > $max_lifetime)) {
session_unset();
session_destroy();
return false;
}
$_SESSION['last_activity'] = time();
return true;
}
header("X-Frame-Options: DENY");
header("X-XSS-Protection: 1; mode=block");
header("X-Content-Type-Options: nosniff");
class SecureSession {
public function __construct() {
if (session_status() === PHP_SESSION_NONE) {
session_start([
'cookie_secure' => true,
'cookie_httponly' => true,
'cookie_samesite' => 'Strict'
]);
}
$this->regenerateSession();
}
private function regenerateSession() {
if (!isset($_SESSION['created'])) {
session_regenerate_id(true);
$_SESSION['created'] = time();
}
}
}