Rumah > Artikel > hujung hadapan web > Lindungi Token JWT daripada Pemalsuan Token dan Serangan Manipulasi Data
Token Web JSON (JWT) digunakan secara meluas untuk mendapatkan pengesahan API dan pertukaran data. Walau bagaimanapun, pelaksanaan dan pengendalian yang tidak betul boleh mendedahkan kelemahan yang membawa kepada pemalsuan token dan manipulasi data. Dalam blog ini, kami akan meneroka kelemahan biasa JWT, contoh serangan dunia sebenar dan amalan terbaik untuk mengurangkan risiko ini.
JWT ialah cara padat, selamat URL untuk mewakili tuntutan yang akan dipindahkan antara dua pihak. Ia terdiri daripada tiga bahagian: Pengepala, Muatan dan Tandatangan, dikodkan dalam Base64.
Struktur JWT:
{ "header": { "alg": "HS256", "typ": "JWT" }, "payload": { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }, "signature": "SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" }
1. Serangan Kekeliruan Algoritma:
Penyerang boleh mengeksploitasi algoritma yang lemah atau menukar algoritma dalam pengepala token kepada tiada, yang membawa kepada pemalsuan token.
Contoh:
{ "alg": "none", "typ": "JWT" }
Mitigasi:
Sentiasa sahkan parameter alg pada bahagian pelayan dan tolak token dengan algoritma "tiada" atau lemah.
Pelaksanaan Selamat:
const jwt = require('jsonwebtoken'); const payload = { sub: "1234567890", name: "John Doe" }; const secret = 'your-256-bit-secret'; const token = jwt.sign(payload, secret, { algorithm: 'HS256' }); jwt.verify(token, secret, { algorithms: ['HS256'] }, function(err, decoded) { if (err) throw new Error('Token verification failed'); console.log(decoded); });
2. Serangan Suntikan Utama:
Penyerang mungkin memanipulasi muatan untuk memasukkan kunci baharu, yang membawa kepada akses tanpa kebenaran.
Contoh:
{ "sub": "1234567890", "name": "John Doe", "admin": true }
Mitigasi:
Pastikan tuntutan disahkan dengan betul dan maklumat sensitif tidak disimpan dalam muatan.
Pelaksanaan Selamat:
const payload = { sub: "1234567890", name: "John Doe" }; const token = jwt.sign(payload, secret, { algorithm: 'HS256' }); jwt.verify(token, secret, function(err, decoded) { if (err) throw new Error('Token verification failed'); if (decoded.admin) throw new Error('Unauthorized access'); console.log(decoded); });
3. Kunci Rahsia Lemah:
Menggunakan kunci rahsia yang lemah atau boleh diramal boleh menyebabkan serangan kekerasan.
Mitigasi:
Gunakan kunci rahsia yang kuat dan dijana secara rawak dan putarkannya dengan kerap.
Pelaksanaan Selamat:
const crypto = require('crypto'); const secret = crypto.randomBytes(64).toString('hex'); const token = jwt.sign(payload, secret, { algorithm: 'HS256' }); jwt.verify(token, secret, function(err, decoded) { if (err) throw new Error('Token verification failed'); console.log(decoded); });
Berikut ialah contoh lengkap cara melaksanakan JWT dengan selamat dalam aplikasi Node.js:
Langkah 1: Pasang Ketergantungan
npm install jsonwebtoken express body-parser
Langkah 2: Buat Pelayan Mudah
const express = require('express'); const bodyParser = require('body-parser'); const jwt = require('jsonwebtoken'); const crypto = require('crypto'); const app = express(); app.use(bodyParser.json()); const secret = crypto.randomBytes(64).toString('hex'); app.post('/login', (req, res) => { const { username, password } = req.body; // Authenticate user (dummy check for example) if (username === 'user' && password === 'pass') { const payload = { username }; const token = jwt.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }); res.json({ token }); } else { res.status(401).json({ message: 'Invalid credentials' }); } }); app.get('/protected', (req, res) => { const token = req.headers['authorization']; if (!token) return res.status(403).json({ message: 'No token provided' }); jwt.verify(token, secret, { algorithms: ['HS256'] }, (err, decoded) => { if (err) return res.status(500).json({ message: 'Failed to authenticate token' }); res.json({ message: 'Access granted', user: decoded }); }); }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Memahami dan mengurangkan kelemahan JWT adalah penting untuk mengekalkan keselamatan aplikasi anda. Dengan mengikuti amalan terbaik dan mengendalikan JWT dengan betul, anda boleh menghalang pemalsuan token dan manipulasi data, memastikan keselamatan API yang teguh.
Lindungi API anda sekarang dengan melaksanakan amalan terbaik ini untuk melindungi daripada kelemahan JWT!
Atas ialah kandungan terperinci Lindungi Token JWT daripada Pemalsuan Token dan Serangan Manipulasi Data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!