Gunakan Senarai Hitam JWT (JSON Web Token) untuk melaksanakan pengesahan keselamatan PHP
Dengan perkembangan Internet, keselamatan aplikasi web menjadi semakin penting. Apabila melaksanakan pengesahan keselamatan untuk aplikasi PHP, kami boleh menggunakan JWT (JSON Web Token) sebagai penyelesaian pengesahan keselamatan. Untuk meningkatkan keselamatan JWT, kami boleh menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh.
JWT ialah standard terbuka (RFC 7519) untuk pengesahan dan kebenaran. Ia terdiri daripada tiga bahagian: Pengepala, Muatan dan Tandatangan. Pengepala mengandungi maklumat jenis algoritma dan Token, Muatan mengandungi maklumat data pengguna, dan Tandatangan dijana berdasarkan tandatangan Pengepala, Muatan dan Kunci Rahsia.
Proses untuk pengesahan menggunakan JWT adalah seperti berikut:
Namun, jika JWT sah untuk jangka masa yang lama, setelah Token bocor, penyerang sentiasa boleh menggunakan Token untuk melakukan operasi yang menyalahi undang-undang. Untuk menyelesaikan masalah ini, kami boleh menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh Apabila pengguna log keluar atau menukar kata laluan mereka, Token yang berkaitan akan ditambahkan ke Senarai Hitam.
Berikut ialah contoh kod untuk menggunakan JWT Blacklist untuk melaksanakan pengesahan keselamatan 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 是否存在 }
Menggunakan contoh kod di atas, kami boleh melaksanakan pengesahan keselamatan JWT dan pengurusan Senarai Hitam dalam aplikasi PHP dengan mudah. Dengan menggunakan JWT dan Senarai Hitam, kami boleh meningkatkan keselamatan pengesahan dan meningkatkan perlindungan aplikasi web.
Ringkasan:
Artikel ini memperkenalkan cara menggunakan JWT dan Senarai Hitam untuk melaksanakan pengesahan keselamatan PHP. Melalui JWT, kami boleh menghantar maklumat pengguna dengan selamat, dan menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh, meningkatkan keselamatan pengesahan. Dalam pembangunan sebenar, kami boleh mengoptimumkan dan mengembangkan kod mengikut keperluan sebenar untuk memenuhi keperluan keselamatan dalam senario tertentu.
Pautan rujukan:
[1] Token Web JSON (JWT) - https://jwt.io/
[2] RFC 7519 - https://tools.ietf.org/html/rfc7519
Atas ialah kandungan terperinci Gunakan Senarai Hitam JWT (Token Web JSON) untuk melaksanakan pengesahan keselamatan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!