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

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

毒舌时刻

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

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

为什么你需要前端安全

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

反面教材

// 反面教材:不安全的登录 // 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

强烈建议收藏!2026热门AI编程工具推荐,分场景TOP7:覆盖前端/后端/云原生

强烈建议收藏!2026热门AI编程工具推荐,分场景TOP7:覆盖前端/后端/云原生

2025年被称为AI编程元年,这一领域正从“是否采用”转向“如何更好地集成与落地”。在2026年初,开发场景进一步细分,能够精准匹配场景需求的AI工具,正成为开发者效率翻倍的关键。 01 场景化需求:AI编程工具的核心分水岭 随着AI编程工具功能不断成熟,开发者正在告别“一款工具通吃”的阶段。如今,选择的关键在于能否针对前端、后端、云原生等具体场景,提供深度适配的智能解决方案。 这种转变意味着,工具不仅要能生成代码,更要能理解不同技术栈的最佳实践、特定场景的核心痛点,并具备端到端解决复杂工程任务的能力。 2026年的开发环境,工具与场景的匹配度决定了开发者是事半功倍,还是事倍功半。 02 Trae:全场景适配的AI原生开发神器 字节跳动推出的Trae,目标不仅是辅助工具,而是成为真正的“AI工程师”。其最大的亮点是 SOLO模式,将AI从“辅助编码工具”升级为“全流程开发负责人”。用户通过自然语言描述需求,AI便能自主拆解任务、编码、测试直至部署上线。 在针对企业复杂场景的优化上,Trae CN企业版近期发布了重磅升级。它能支持10万级文件、

3分钟搭建本地Web服务器:Web Server for Chrome完全指南

3分钟搭建本地Web服务器:Web Server for Chrome完全指南 【免费下载链接】web-server-chromeAn HTTP Web Server for Chrome (chrome.sockets API) 项目地址: https://gitcode.com/gh_mirrors/we/web-server-chrome 还在为复杂的本地开发环境配置而头疼吗?Web Server for Chrome是一款基于Chrome扩展的轻量级HTTP服务器,让您无需任何技术背景就能快速启动本地Web服务。这款工具已经被20多万用户验证,是替代python -m SimpleHTTPServer的完美选择。 🎯 为什么选择Web Server for Chrome? 对比维度Web Server for Chrome传统本地服务器安装配置⭐⭐⭐⭐⭐(一键安装)⭐⭐(环境依赖)启动速度⭐⭐⭐⭐⭐(秒级启动)⭐⭐⭐(较慢)操作难度⭐⭐⭐⭐⭐(图形界面)⭐⭐(命令行)功能完整⭐

Xinference-v1.17.1快速部署:GitHub Codespaces云端环境3分钟启动WebUI

Xinference-v1.17.1快速部署:GitHub Codespaces云端环境3分钟启动WebUI 1. 为什么这次更新值得你立刻试试? Xinference-v1.17.1不是一次普通的小版本迭代。它把“开箱即用”这件事做到了新高度——你不需要本地装Python、不用配CUDA、甚至不用下载模型文件,只要一个浏览器,三分钟内就能看到完整的WebUI界面跑起来,还能直接和Qwen2、Phi-3、Gemma2这些热门模型对话。 更关键的是,它彻底打破了“换模型=重装环境”的老套路。以前想试试Llama3还是DeepSeek-V2,得反复改配置、删缓存、调参数;现在只需要改一行代码,GPT的调用逻辑就自动切换成任意开源LLM。这不是概念演示,是实打实能在云上跑、在笔记本跑、在边缘设备跑的生产级推理平台。 如果你试过用Ollama拉模型卡在99%、被vLLM的编译折磨到放弃、或者被FastChat的端口冲突搞崩溃……那这次,真的可以松一口气了。 2. 什么是Xinference?一句话说清它能帮你省多少事 Xinference(全称Xorbits Inference

SAP ABAP Web Dynpro (保准教会)

SAP ABAP Web Dynpro (保准教会)

文章目录 * 前言 * 01、案例介绍/笔者需求 * 02、Web Dynpro 是什么? *             `a.`Web Dynpro的用途及优点 *             `b.`什么是MVC架构? *             `c.`Web dynpro 开发方式技术架构 *             `d.`Web dynpro 组件架构逻辑 * 03、创建运行一个简单Web Dynpro *             `a.`创建 *             `b.`Layout界面异常 *             `c.`绘制简单的控件 并运行Web Dynpro * 04、Web Dynpro 各界面作用 *             `a.`VIEW(视图) 各分页签的作用 *             `b.`Window(窗体) 各分页签的作用 * 05、Web Dynpro 对应的3大控制器 *             `a.