跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.js大前端

前端安全基础:密码存储与常见漏洞防护

综述由AI生成探讨了前端安全的核心实践,包括密码传输加密、Token 存储方式(HttpOnly Cookie)、XSS 攻击防护(转义输入)以及 CSRF 防护(Token 验证)。同时强调了依赖包更新和审计的重要性。通过对比不安全与安全的代码示例,帮助开发者识别并修复常见的前端安全隐患,构建更安全的 Web 应用。

王者发布于 2026/4/5更新于 2026/5/2119 浏览

为什么你需要关注前端安全

最近看到一个项目,直接在前端存储用户密码,没有任何加密措施。这是一个严重的安全隐患。

反面教材

// 反面教材:不安全的代码
function Login() {
  const [username, setUsername] = React.useState('');
  const [password, setPassword] = React.useState('');
  
  const handleSubmit = async (e) => {
    e.preventDefault();
    // 直接发送密码,没有加密
    const response = await fetch('/api/login', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ username, password })
    });
    const data = await response.json();
    // 直接存储 token 在 localStorage
    localStorage.setItem('token', data.token);
  };
  
  return (
    <form onSubmit={handleSubmit}>
      <input type="text" placeholder="用户名" value={username} onChange={(e) => setUsername(e.target.value)} />
      <input type="password" placeholder="密码" value={password} onChange={(e) => setPassword(e.target.value)} />
      <button type="submit">登录</button>
    </form>
  );
}
export default Login;

正确姿势

1. 密码安全
// 正确姿势:密码安全
// 1. 使用 HTTPS
// 2. 密码加密传输
function Login() {
  const [username, setUsername] = React.useState('');
  const [password, setPassword] = React.useState('');
  
  const handleSubmit = async (e) => {
    e.preventDefault();
    // 使用 HTTPS 传输
    const response = await fetch('/api/login', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ username, password })
    });
    const data = await response.json();
    // 使用 httpOnly cookie 存储 token
    // 服务端设置:res.cookie('token', token, { httpOnly: true, secure: true });
  };
  
  return (
    <form onSubmit={handleSubmit}>
      <input type="text" placeholder="用户名" value={username} onChange={(e) => setUsername(e.target.value)} />
      <input type="password" placeholder="密码" value={password} onChange={(e) => setPassword(e.target.value)} />
      <button type="submit">登录</button>
    </form>
  );
}
export default Login;
2. XSS 防护
// 正确姿势:XSS 防护
// 1. 使用 dangerouslySetInnerHTML 时要小心
// 2. 对用户输入进行转义
function CommentList({ comments }) {
  return (
    <div>
      {comments.map(comment => (
        <div key={comment.id}>
          {/* 安全的方式:直接渲染文本 */}
          <p>{comment.content}</p>
          {/* 不安全的方式 */}
          {/* <p dangerouslySetInnerHTML={{ __html: comment.content }} /> */}
        </div>
      ))}
    </div>
  );
}

// 后端转义
// server.js
app.post('/api/comments', (req, res) => {
  const { content } = req.body;
  // 转义用户输入
  const escapedContent = escapeHtml(content);
  // 存储转义后的内容
  db.insert({ content: escapedContent });
  res.json({ success: true });
});

function escapeHtml(text) {
  return text
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
}
3. CSRF 防护
// 正确姿势:CSRF 防护
// 1. 使用 CSRF token
// 2. 验证 Origin/Referer 头
function Form() {
  const [csrfToken, setCsrfToken] = React.useState('');
  
  React.useEffect(() => {
    // 从服务端获取 CSRF token
    async function getCsrfToken() {
      const response = await fetch('/api/csrf-token');
      const data = await response.json();
      setCsrfToken(data.token);
    }
    getCsrfToken();
  }, []);
  
  const handleSubmit = async (e) => {
    e.preventDefault();
    const response = await fetch('/api/submit', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-CSRF-Token': csrfToken
      },
      body: JSON.stringify({ /* 表单数据 */ })
    });
    const data = await response.json();
    console.log(data);
  };
  
  return (
    <form onSubmit={handleSubmit}>
      <input type="hidden" name="_csrf" value={csrfToken} />
      {/* 表单字段 */}
      <button type="submit">提交</button>
    </form>
  );
}

// 服务端验证
// server.js
app.post('/api/submit', (req, res) => {
  const csrfToken = req.headers['x-csrf-token'] || req.body._csrf;
  if (!csrfToken || !validateCsrfToken(csrfToken)) {
    return res.status(403).json({ error: 'CSRF token invalid' });
  }
  // 处理请求
  res.json({ success: true });
});
4. 依赖安全
// 正确姿势:依赖安全
// 1. 定期更新依赖
// 2. 使用 npm audit 检查漏洞
// 3. 使用 Snyk 等工具监控
{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "scripts": {
    "audit": "npm audit",
    "update": "npm update"
  }
}

运行命令:npm run audit 和 npm run update。

通过上述实践,可以有效提升前端应用的安全性,降低被攻击的风险。

目录

  1. 为什么你需要关注前端安全
  2. 反面教材
  3. 正确姿势
  4. 1. 密码安全
  5. 2. XSS 防护
  6. 3. CSRF 防护
  7. 4. 依赖安全
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 背包类动态规划详解:0-1、完全及二维费用
  • 黑客的四个级别与自学路线中的常见误区
  • Python 发展现状与未来趋势
  • 双栈实现队列:原理、代码与性能分析
  • Python 结合 Hadoop 实现用户网站浏览数据分析
  • C++ 七大排序算法详解
  • STM32 中__weak 弱定义函数核心总结
  • OpenClaw 架构原理与核心机制深度解析
  • DeepSeek-R1 使用技巧:如何平衡深度思考与回复质量
  • GO 谷歌安装器.apk 一键安装包
  • Python 从 0 到 100 完整学习指南
  • Python Web 框架 Django 高级应用:中间件、信号与缓存实战
  • Python 学习路线与进阶书籍推荐
  • AI Agent 架构:基础组成模块深度解析
  • AI Agent 架构:基础组成模块深度解析
  • Git 在 Windows 环境下的安装与使用教程
  • AI Agent 基础架构与核心组件详解
  • yshopmall 开源电商 SaaS 解决方案解析
  • OpenClaw.ai:Agentic AI 时代的 Spring Framework 时刻
  • Neo4j 图数据库入门与 Python 集成实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online