XSS 攻击(跨站脚本攻击)是指攻击者通过在网页中注入恶意脚本,从而在用户浏览网页时对用户进行攻击。以下是防止 XSS 攻击的方法:
对于用户输入的内容进行检查和过滤,防止恶意脚本的注入。可以使用一些开源的 JavaScript 库,如 DOMPurify,Sanitize.js 等等。
// 例:使用 DOMPurify 过滤用户输入的内容
import DOMPurify from 'dompurify';
const userInput = '';
const filteredInput = DOMPurify.sanitize(userInput);
console.log(filteredInput); // 输出:<script>alert("XSS attack");</script>
将用户输入的内容中的特殊字符进行转义,防止恶意脚本的注入。可以使用一些内置的 JavaScript 函数,如 escape,encodeURI,encodeURIComponent 等等。
// 例:使用 encodeURI 转义用户输入的内容
const userInput = '';
const encodedInput = encodeURI(userInput);
console.log(encodedInput); // 输出:%3Cscript%3Ealert(%22XSS%20attack%22);%3C/script%3E
CSRF 攻击(跨站请求伪造攻击)是指攻击者通过伪造用户的身份,向网站发送恶意请求,从而对用户进行攻击。以下是防止 CSRF 攻击的方法:
在网站的后端代码中,验证请求的来源是否合法。可以通过检查请求头中的 Referer 字段或 Origin 字段来确定请求的来源是否合法。
// 例:使用 Node.js 中的 express 框架,验证请求的来源是否合法
const express = require('express');
const app = express();
app.use((req, res, next) => {
const referer = req.get('Referer');
const origin = req.get('Origin');
if (referer && origin && referer.startsWith(origin)) {
next();
} else {
res.status(403).send('Forbidden');
}
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
在网站的前端代码中,向每个请求中添加一个 CSRF Token,用于验证请求的合法性。可以使用一些开源的 JavaScript 库,如 csrf,csurf 等等。
// 例:使用 csurf 库添加 CSRF Token
const express = require('express');
const csrf = require('csurf');
const app = express();
app.use(csrf());
app.get('/', (req, res) => {
res.render('index', { csrfToken: req.csrfToken() });
});
app.post('/submit', (req, res) => {
const csrfToken = req.body._csrf;
if (csrfToken === req.csrfToken()) {
res.send('Success');
} else {
res.status(403).send('Forbidden');
}
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});