JWT(JSON 웹 토큰) 블랙리스트를 사용하여 PHP 보안 검증 구현
인터넷이 발전하면서 웹 애플리케이션의 보안이 더욱 중요해졌습니다. PHP 애플리케이션에 대한 보안 검증을 구현할 때 JWT(JSON Web Token)를 보안 검증 솔루션으로 사용할 수 있습니다. JWT의 보안을 강화하기 위해 블랙리스트를 사용하여 만료된 토큰을 관리할 수 있습니다.
JWT는 인증 및 승인을 위한 개방형 표준(RFC 7519)입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. Header에는 알고리즘과 Token 유형 정보가 포함되고, Payload에는 사용자 데이터 정보가 포함되며, Signature는 Header, Payload 및 Secret Key 서명을 기반으로 생성됩니다.
JWT를 이용한 인증 과정은 다음과 같습니다.
그러나 JWT가 오랫동안 유효한 경우 토큰이 유출되면 공격자는 항상 토큰을 사용하여 불법적인 작업을 수행할 수 있습니다. 이 문제를 해결하기 위해 블랙리스트를 사용하여 만료된 토큰을 관리할 수 있습니다. 사용자가 로그아웃하거나 비밀번호를 변경하면 해당 토큰이 블랙리스트에 추가됩니다.
다음은 JWT 블랙리스트를 사용하여 PHP 보안 검증을 구현하는 코드 예제입니다.
// 定义 JWT 的 Secret Key $secretKey = "your_secret_key"; // 生成 JWT function generateJWT($userId) { global $secretKey; $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']); $payload = json_encode(['userId' => $userId]); $base64UrlHeader = base64UrlEncode($header); $base64UrlPayload = base64UrlEncode($payload); $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true); $base64UrlSignature = base64UrlEncode($signature); return $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature; } // 验证 JWT 是否有效 function validateJWT($jwt) { global $secretKey; list($base64UrlHeader, $base64UrlPayload, $base64UrlSignature) = explode('.', $jwt); $signature = base64UrlDecode($base64UrlSignature); $expectedSignature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true); if ($signature !== $expectedSignature) { return false; } $payload = json_decode(base64UrlDecode($base64UrlPayload), true); // 在 Blacklist 中查找当前 Token 是否存在 if (isTokenBlacklisted($jwt)) { return false; } return $payload['userId']; } // 将字符串进行 Base64Url 编码 function base64UrlEncode($data) { $base64 = base64_encode($data); if ($base64 === false) { return false; } // 替换特殊字符 $base64Url = strtr($base64, '+/', '-_'); // 删除 = 字符 $base64Url = rtrim($base64Url, '='); return $base64Url; } // 将 Base64Url 编码的字符串解码 function base64UrlDecode($base64Url) { // 添加 = 字符 $base64 = str_pad(strtr($base64Url, '-_', '+/'), strlen($base64Url) % 4, '=', STR_PAD_RIGHT); return base64_decode($base64); } // 将 Token 加入 Blacklist function blacklistToken($jwt) { // 在数据库或缓存中将 Token 标记为失效 } // 判断 Token 是否在 Blacklist 中 function isTokenBlacklisted($jwt) { // 在数据库或缓存中查询 Token 是否存在 }
위 코드 예제를 사용하면 PHP 애플리케이션에서 JWT 보안 검증 및 블랙리스트 관리를 쉽게 구현할 수 있습니다. JWT와 블랙리스트를 사용하면 인증 보안을 강화하고 웹 애플리케이션 보호를 강화할 수 있습니다.
요약:
이 글에서는 JWT와 블랙리스트를 활용하여 PHP 보안 검증을 구현하는 방법을 소개합니다. JWT를 통해 사용자 정보를 안전하게 전송할 수 있으며, 만료된 토큰을 블랙리스트로 관리하여 인증 보안을 강화할 수 있습니다. 실제 개발에서는 특정 시나리오의 보안 요구 사항을 충족하기 위해 실제 요구 사항에 따라 코드를 최적화하고 확장할 수 있습니다.
참조 링크:
[1] JSON 웹 토큰(JWT) - https://jwt.io/
[2] RFC 7519 - https://tools.ietf.org/html/rfc7519
위 내용은 의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!