防止 XSS 攻击:
1. 对于用户输入的数据,需要进行过滤和转义,避免恶意脚本注入。可以使用类似于 htmlspecialchars() 的函数进行转义。
2. 对于从服务器返回的数据,需要进行验证和过滤,避免恶意脚本注入。可以使用类似于 DOMPurify 的库进行过滤。
3. 在发送数据时,需要使用 JSON.stringify() 将数据转换为 JSON 格式,避免恶意脚本注入。
防止 CSRF 攻击:
1. 在发送请求时,需要添加 CSRF Token,避免恶意请求被执行。可以在登录时生成一个 CSRF Token,并在每次请求时将其添加到请求头中。
2. 在服务器端,需要验证请求中的 CSRF Token 是否正确,避免恶意请求被执行。可以在每次请求时,从请求头中获取 CSRF Token,并与服务器端保存的 Token 进行比较。
以下是示例代码:
防止 XSS 攻击:
```javascript
// 对用户输入的数据进行转义
function escapeHtml(str) {
return str.replace(/[&<>"']/g, function(match) {
switch (match) {
case '&':
return '&';
case '<':
return '<';
case '>':
return '>';
case '"':
return '"';
case "'":
return ''';
}
});
}
// 对从服务器返回的数据进行过滤
function filterHtml(str) {
return DOMPurify.sanitize(str);
}
// 发送数据时,使用 JSON.stringify() 转换为 JSON 格式
const data = {
name: '张三',
age: 18,
hobby: '<script>alert("恶意脚本")</script>'
};
const json = JSON.stringify(data);
```
防止 CSRF 攻击:
```javascript
// 在登录时生成 CSRF Token,并保存到本地
const csrfToken = 'xxxxx';
localStorage.setItem('csrfToken', csrfToken);
// 在发送请求时,添加 CSRF Token 到请求头中
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api');
xhr.setRequestHeader('X-CSRF-Token', csrfToken);
xhr.send();
// 在服务器端,验证请求中的 CSRF Token 是否正确
const csrfToken = req.headers['x-csrf-token'];
const savedToken = localStorage.getItem('csrfToken');
if (csrfToken !== savedToken) {
// CSRF Token 不正确,拒绝请求
res.status(403).send('Forbidden');
}
```