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

前端安全实践:密码加密与常见攻击防护

综述由AI生成探讨前端安全实践,指出明文传输密码的风险,并提供解决方案。包括使用 bcrypt 进行密码哈希存储,利用 DOMPurify 和 CSP 头防止 XSS 攻击,以及通过 CSRF token 机制防御跨站请求伪造。代码示例展示了 React 组件与 Next.js API 路由的安全配置。

二进制发布于 2026/4/6更新于 2026/5/2431 浏览

前端安全实践:密码加密与常见攻击防护

引言

各位前端同行,咱们今天聊聊前端安全。别告诉我你还在写明文存储密码,那感觉就像把家门钥匙挂在门口——方便,但不安全。

不安全示例

// components/LoginForm.jsx
export default function LoginForm() {
  const [username, setUsername] = useState('');
  const [password, setPassword] = 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 })
    });
    if (response.ok) {
      // 登录成功
    }
  };
  return (
    <form onSubmit={handleSubmit}>
      <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} placeholder="用户名" />
       setPassword(e.target.value)} placeholder="密码" />
      登录
    
  );
}
<input type="password" value={password} onChange={(e) =>
<button type="submit">
</button>
</form>

注意:上述代码中密码在网络传输中是明文,本地存储也是明文,存在严重安全隐患。

安全实现方案

1. 密码加密

// utils/auth.js
import bcrypt from 'bcryptjs';

export async function hashPassword(password) {
  const salt = await bcrypt.genSalt(10);
  return await bcrypt.hash(password, salt);
}

export async function comparePassword(password, hashedPassword) {
  return await bcrypt.compare(password, hashedPassword);
}

// api/login.js
export default async function handler(req, res) {
  const { username, password } = req.body;
  const user = await User.findOne({ username });
  if (!user) {
    return res.status(401).json({ error: '用户不存在' });
  }
  const isMatch = await comparePassword(password, user.password);
  if (!isMatch) {
    return res.status(401).json({ error: '密码错误' });
  }
  // 生成 JWT token
  const token = generateToken(user.id);
  res.json({ token });
}

2. XSS 防护

// components/Comment.jsx
import DOMPurify from 'dompurify';

export default function Comment({ content }) {
  // 净化 HTML 内容
  const sanitizedContent = DOMPurify.sanitize(content);
  return (
    <div dangerouslySetInnerHTML={{ __html: sanitizedContent }} />
  );
}

服务器端设置 CSP 头:

// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: '/(.*)',
        headers: [
          {
            key: 'Content-Security-Policy',
            value: "default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted-cdn.com"
          }
        ]
      }
    ];
  }
};

3. CSRF 防护

// pages/api/protected.js
import csrf from 'csurf';
const csrfProtection = csrf({ cookie: true });

export default function handler(req, res) {
  csrfProtection(req, res, () => {
    // 受保护的 API 逻辑
  });
}

客户端使用:

// components/Form.jsx
export default function Form() {
  const [csrfToken, setCsrfToken] = useState('');
  useEffect(() => {
    fetch('/api/csrf-token')
      .then(res => res.json())
      .then(data => setCsrfToken(data.token));
  }, []);

  const handleSubmit = async (e) => {
    e.preventDefault();
    await fetch('/api/protected', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-CSRF-Token': csrfToken
      },
      body: JSON.stringify({ data: 'test' })
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="hidden" name="_csrf" value={csrfToken} />
      {/* 表单内容 */}
    </form>
  );
}

总结:现代前端开发应遵循安全第一原则,通过加密、CSP 和 Token 机制有效防御常见攻击。

目录

  1. 前端安全实践:密码加密与常见攻击防护
  2. 引言
  3. 不安全示例
  4. 安全实现方案
  5. 1. 密码加密
  6. 2. XSS 防护
  7. 3. CSRF 防护
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • AI 产品架构设计:从 0 到 1 搭建信息架构与核心业务流程
  • 哈希表进阶:哈希桶封装 unordered_set 和 unordered_map 与迭代器详解
  • Nginx-1.28.0 Windows 版安装包及核心功能说明
  • 哈希表进阶:用哈希桶封装 unordered_set 和 unordered_map 及迭代器实现
  • MySQL 数据类型详解
  • FastAPI:Python 高性能 Web 框架实战指南
  • 数据库迁移 TCO 分析:MySQL 替代隐性成本与工具链实测
  • 低代码 AI 化:是否正在重构开发行业格局?
  • MySQL 迁移 TCO 全景账本:隐性成本与工程化工具链实测
  • C# OpenVINO Sharp 使用 Anomalib PatchCore 进行缺陷检测
  • Flutter 三方库 algolia_client_recommend 鸿蒙适配指南
  • 链表经典题目实战解析:LeetCode Hot 100 高频题解
  • 数据库迁移 TCO 全景账本:MySQL 替代隐性成本与工具链实战
  • DeepSeek-R1-Distill-Llama-8B 模型安全与对抗攻击防护
  • ChatGPT 结构化 Prompt 高级应用
  • ASP.NET Core Razor Pages 从零搭建入门指南
  • 基于 Python 的单脉冲雷达导引头回波生成技术
  • MaxBot 抢票机器人部署指南:从环境配置到实战策略
  • 低代码搭建 BPM 系统实操指南:流程引擎与表单设计
  • AI 驱动下的内存市场变革:供需、能耗与安全趋势分析

相关免费在线工具

  • 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