01. XSS——往你网页里塞广告
XSS 就是攻击者往你的网页里「塞」一段恶意脚本,别的用户打开时就中招了。就像有人在留言板上贴诈骗广告,其他人都能看到。
三种类型:
反射型——恶意脚本藏在 URL 参数里,服务器没过滤就输出到页面
存储型——恶意脚本存进了数据库,每个访问用户都中招
DOM 型——纯前端问题,JS 把用户输入直接插到页面里
防 XSS 核心就一条:永远别相信用户输入,输出到页面时必须转义。
javascript
// 千万别这样!
element.innerHTML = userInput; // 极度危险
// 安全做法
element.textContent = userInput; // 不会执行 HTML
// 自己转义
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """);
}React、Vue 默认会转义输出,但用了 dangerouslySetInnerHTML 或 v-html 时要特别留神。
02. CSRF——借你的手干坏事
CSRF 就是攻击者诱骗你在不知情时发出了你本不想发的请求。你登录了银行然后点了个恶意链接——那个链接在背后偷偷往银行发转账请求,因为浏览器还带着你银行的登录 Cookie。
防御措施:
CSRF Token——服务器每次给一个随机 Token,提交时必须带上,攻击者猜不到
SameSite Cookie——给 Cookie 标上 SameSite=Strict/Lax,禁止跨站携带
验证 Referer/Origin——看请求是不是从你自己的网站发起的
javascript
// Express 中 CSRF Token
const csrf = require('csurf');
app.use(csrf({ cookie: true }));
app.get('/form', (req, res) => {
res.render('send', { csrfToken: req.csrfToken() });
});
// SameSite Cookie
res.cookie('session', token, {
httpOnly: true, secure: true, sameSite: 'strict'
});03. SQL 注入——最经典的漏洞
SQL 注入就是把用户输入直接拼进 SQL 语句造成的漏洞。比如:
"SELECT * FROM users WHERE name = '" + userInput + "'"
如果有人输入 ' OR '1'='1,SQL 就变成:
"SELECT * FROM users WHERE name = '' OR '1'='1'"
结果——所有用户数据全被拖出来。
防御极简单:永远用参数化查询(Prepared Statements),不要拼字符串。所有主流数据库驱动和 ORM 都内置这个能力。
04. CORS 跨域——浏览器的门禁
浏览器的同源策略禁止一个网站随意访问另一个网站的数据——这是在保护你。但前后端分离时(API 在 api.example.com,页面在 www.example.com),需要跨域。
CORS 就是服务端告诉浏览器:「我允许这些域名来访问」。通过 Access-Control-Allow-Origin 等响应头控制。
注意:CORS 只是浏览器限制,curl 或 Postman 发请求不受此限制。
知识测验
第 1/6 题正确 0
XSS 攻击的本质是什么?
下一节
下一节 网络诊断工具