前端安全:别让你的应用变成黑客的游乐场

前端安全:别让你的应用变成黑客的游乐场

毒舌时刻

这代码写得跟网红滤镜似的——仅供参考。

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

为什么你需要前端安全

最近看到一个项目,登录表单直接把密码发送到服务器,没有任何加密。我就想问:你是在做应用还是在给黑客送大礼?

反面教材

// 反面教材:不安全的登录 // 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="用户名" /> <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} placeholder="密码" /> <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 防护

// 正确姿势:防止 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 防护

// 正确姿势:防止 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(() => { // 获取 CSRF token 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> ); } 

毒舌点评:这才叫现代前端,安全第一,让黑客无处下手。

Read more

白嫖专业版!Github Copilot Pro竟然可以免费使用

今天有个好消息要和大家分享: GitHub Copilot 已在 Visual Studio Code 上免费开放! 无论是谁,都能畅享 AI 助力下的高效开发新体验! 如何免费在vscode中使用copilot * 下载最新版本的 VS Code https://code.visualstudio.com/Download 如果下载慢,可以通过下面的网盘链接获取: https://pan.quark.cn/s/3fb6dcedfed8 * 打开vscode编译器,按照下面步骤操作 这时候就可以看到账户已经启用Copilot Free copilot Free 和copilot Pro主要功能对比 功能FreePro消息和互动每月最多 50 个无限实时代码建议每月最多 2,000无限上下文感知编码支持和解释支持支持VS Code 中的多文件编辑支持支持切换模型支持支持GitHub 中的代码审查不支持支持拉取请求中的 Copilot Workspace不支持支持VS Code 中的 Java

丹摩智算平台部署 Llama 3.1:实践与体验

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 * 前言 * 部署前的准备 * 创建实例 * 部署与配置 Llama 3.1 * 使用心得 * 总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模型之一。今天,我将通过这次实践,分享在丹摩平台上部署 Llama 3.1 的实际操作流程以及我的个人心得。 部署前的准备 Llama 3.1 是一个资源需求较高的模型,因此在部署之前,首先要确保拥有合适的硬件环境。按照文档中的要求,我选择了 Llama 3.1 8B 版本进行测试。8B 模型对 GPU 显存的需求为

ClawdBot语音效果:Whisper tiny在嘈杂环境下的中英文语音转写准确率实测

ClawdBot语音效果:Whisper tiny在嘈杂环境下的中英文语音转写准确率实测 1. ClawdBot是什么:一个真正属于你的本地AI助手 ClawdBot不是云端API的又一个封装,也不是需要反复申请密钥的SaaS服务。它是一个能完整运行在你个人设备上的AI助手——从模型推理、对话管理到多模态处理,全部离线完成。你不需要担心数据上传、隐私泄露或按调用次数付费。只要一台性能尚可的笔记本、NUC盒子,甚至树莓派4,就能把它跑起来。 它的后端由vLLM驱动,这意味着Qwen3-4B-Instruct这类4B参数量级的大模型,在消费级显卡上也能实现毫秒级响应。但ClawdBot的价值远不止于文本生成。它把语音、图像、结构化查询等能力,像搭积木一样整合进统一框架:你说一句话,它能听、能懂、能答;你发一张菜单截图,它能识、能译、能解释;你问“东京现在几点”,它不跳转网页,直接给你答案。 这种“全链路本地化”的设计,让它天然适合对隐私敏感、网络受限或追求低延迟响应的场景。而今天我们要聚焦的,正是它语音能力中最关键的一环——Whisper tiny模型在真实嘈杂环境下的中英文转写

Spec-Kit+Copilot打造AI规格驱动开发

Spec-Kit+Copilot打造AI规格驱动开发

作者:算力魔方创始人/英特尔创新大使 刘力 一,什么是Spec-Kit? 在传统的软件开发中,通常先有需求→ 写规格 → 再写代码;规格多数是“指导性文档”,而真正的业务逻辑和边界由程序员“翻译”出来。Spec-Driven Development(规格驱动开发)的理念是,将规格(spec)从“仅供参考”提升为可执行、可驱动的核心工件,直接引导后续设计、计划、任务拆解、实现等流程。spec-kit 是 GitHub 提供的一个工具集 / CLI / 模板库,用来在项目中落地这种流程! Github: https://github.com/github/spec-kit 二,搭建运行环境 本节将指导您从零开发搭建Spec-Kit的运行环境。 第一步:在Ubuntu24.04上安装uv: curl -LsSf