GUID(全局唯一标识符)是一个128位的数字标识符,通常表示为32个十六进制数字,形式如:3F2504E0-4F89-11D3-9A0C-0305E82C3301
。在AJAX请求中使用GUID可以增加请求的安全性,防止CSRF(跨站请求伪造)攻击和其他类型的恶意请求。
function generateGUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// Express示例
app.post('/api/protected', (req, res) => {
const { guid, data } = req.body;
if (!isValidGUID(guid)) {
return res.status(403).json({ error: 'Invalid request token' });
}
// 处理正常请求
});
原因:如果GUID不随时间变化,攻击者可能截获并重放
解决方案:
原因:存储在localStorage或cookie中可能被XSS攻击获取
解决方案:
原因:大量GUID验证可能影响服务器性能
解决方案:
// 结合时间戳和HMAC的增强GUID
function generateSecureGUID(secret) {
const timestamp = Date.now();
const randomPart = generateGUID();
const hmac = crypto.createHmac('sha256', secret)
.update(`${timestamp}${randomPart}`)
.digest('hex');
return `${timestamp}-${randomPart}-${hmac}`;
}
通过GUID保护AJAX请求是一种简单有效的安全措施,但应作为多层安全策略的一部分,而不是唯一的安全屏障。
没有搜到相关的文章