文章摘要 FakeGPT
加载中...|
网络安全基础:从 HTTPS 原理到常见攻击防范
自己做网站,安全是最容易被忽略、出事最麻烦的一环。这篇文章不讲深奥理论,只讲每个站长、开发者都该知道的安全底线。
HTTPS:让数据在传输中加密
HTTP 是明文传输,你的账号密码在链路上可以被抓包看到。HTTPS = HTTP + TLS 加密。
工作原理一句话版:
- 客户端请求服务器,服务器返回证书(含公钥)
- 客户端验证证书可信(CA 签名),生成对称密钥并用公钥加密发给服务器
- 之后双方用对称密钥加密通信
证书怎么来:用 Let's Encrypt 免费申请,90 天自动续期(参考本站的 SSL 文章)。不要买几千块的证书,免费的完全够用。
XSS:往你的页面里注入脚本
攻击方式:用户提交的内容里带 <script>,你原样渲染到页面,别人的脚本就在你网站上跑(偷 Cookie、弹窗钓鱼)。
防御:
- 输出转义(最重要):框架默认转义(Vue/React 模板输出默认转义
<为<),不要用v-html/dangerouslySetInnerHTML渲染用户输入 - 输入校验:富文本用白名单过滤(只允许安全标签)
- HttpOnly Cookie:JS 读不到,XSS 偷不了登录态
js
// 错误:直接拼 HTML
document.getElementById("box").innerHTML = userInput;
// 正确:用 textContent
document.getElementById("box").textContent = userInput;SQL 注入:把 SQL 拼进你的查询
攻击方式:输入 ' OR 1=1 -- 拼进 SQL,可能绕过登录、拖库删库。
防御:永远用参数化查询,不要拼字符串。
js
// 错误:字符串拼接(危险!)
const sql = `SELECT * FROM users WHERE name = '${input}'`;
// 正确:参数化(安全)
const sql = "SELECT * FROM users WHERE name = ?";
db.query(sql, [input]);只要坚持参数化,SQL 注入基本就堵死了。ORM 框架(Sequelize、TypeORM、Prisma)默认参数化,用它们也能规避。
CSRF:借你的登录态干坏事
攻击方式:你在 A 站登录着,访问了恶意页面,它偷偷向 A 站发请求(带着你的 Cookie),A 站以为是你在操作(改密码、转账)。
防御:
- CSRF Token:表单带一个一次性 token,服务端校验
- SameSite Cookie:
Set-Cookie: ...; SameSite=Lax,跨站请求不带 Cookie - 校验 Origin/Referer:请求来源不是自己站点就拒绝
text
Set-Cookie: session=xxx; HttpOnly; Secure; SameSite=Lax这一行 Cookie 属性同时防了 XSS 偷取(HttpOnly)和大部分 CSRF(SameSite)。
CORS 与 CSRF 别搞混
- CORS:浏览器限制"跨域读取"响应,是浏览器的安全机制
- CSRF:利用登录态发起请求,是"用户被利用"
CORS 配置原则:只开需要的域名,别用 *:
text
Access-Control-Allow-Origin: https://trusted.example.com
Access-Control-Allow-Credentials: true个人站长安全清单
- ✅ 全站 HTTPS:HTTP 强制跳转
- ✅ 密码安全:bcrypt/argon2 加密存储,别存明文
- ✅ 登录防护:验证码 + 失败次数限制(防暴力破解)
- ✅ 服务器加固:改默认 SSH 端口、禁用 root 密码登录、开防火墙
- ✅ 权限最小化:数据库账号不给 root,只授权需要的库
- ✅ 备份:数据库 + 文件定期备份,异地一份
- ✅ 依赖更新:
npm audit/pip-audit定期扫漏洞 - ✅ 隐藏敏感信息:
.env不进 Git、日志不打密码
小结
安全的本质是默认不信外部输入:用户输入要转义、数据库操作要参数化、Cookie 要加 HttpOnly + SameSite、跨域要白名单。把这四条底线守住,网站的安全性就已经超过大多数个人站点。
网络安全基础:从 HTTPS 原理到常见攻击防范https://xkbk.cn/posts/web-security-basics
评论 匿名评论 隐私政策