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

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

毒舌时刻

这代码写得跟筛子似的,到处都是漏洞。

各位前端同行,咱们今天聊聊前端安全。别告诉我你还在忽略安全问题,那感觉就像在没有锁的房子里放贵重物品——能放,但随时可能被偷。

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

最近看到一个项目,直接在前端存储用户密码,没有任何加密措施。我就想问:你是在做网站还是在做慈善?

反面教材

// 反面教材:不安全的代码 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 等工具监控 // package.json { "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 

毒舌点评:这才叫前端安全,让你的网站固若金汤,再也不用担心黑客攻击了。

Read more

【OpenClaw从入门到精通】第01篇:保姆级教程——从零开始搭建你的第一个本地AI助理(2026实测版)

【OpenClaw从入门到精通】第01篇:保姆级教程——从零开始搭建你的第一个本地AI助理(2026实测版)

摘要:本文聚焦2026年开源AI代理工具OpenClaw的本地部署与实操,从核心概念拆解入手,先厘清OpenClaw、Gateway、Skills、ClawHub的关联,再明确硬件系统要求与大模型API-Key准备要点,通过官方一键安装脚本完成本地部署,并配置阿里云百炼API实现大模型对接。以“让AI助理抓取开源中国热门项目”的虚拟实战案例,详细演示Skills调用流程,同时梳理部署中“命令找不到”“API-Key配置失败”等高频问题的解决方法。内容兼顾新手友好性与实操参考性,所有步骤均基于公开技术文档验证,案例为虚拟构建,代码仅作示例未上传GitHub,可指导读者快速搭建本地AI助理并验证核心功能。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性

Flutter 组件 genkit 的适配 鸿蒙Harmony 深度进阶 - 驾驭模型幻觉审计、实现鸿蒙端多维 RAG 向量对齐与端云协同 AI 指挥中心方案

Flutter 组件 genkit 的适配 鸿蒙Harmony 深度进阶 - 驾驭模型幻觉审计、实现鸿蒙端多维 RAG 向量对齐与端云协同 AI 指挥中心方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 genkit 的适配 鸿蒙Harmony 深度进阶 - 驾驭模型幻觉审计、实现鸿蒙端多维 RAG 向量对齐与端云协同 AI 指挥中心方案 前言 在前文中,我们利用 genkit 实现了基础的 AI 模型流式调用(Streaming)与 Prompt 工程。但在真正的“专业级医疗诊断辅助”、“金融量化分析报告生成”或“大型智能客服矩阵”场景中。简单的模型调用仅仅是起点。面对大模型不可避免的“幻觉(Hallucinations)”问题。面对如何在鸿蒙(OpenHarmony)端实现本地向量库(Vector Store)与云端知识库的实时同步。面对如何在不同算力的设备(从手环到大屏)上分配不同的 AI

人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在法律领域的应用场景和重要性 💡 掌握法律领域NLP应用的核心技术(如合同分析、法律文本分类、案例检索) 💡 学会使用前沿模型(如BERT、GPT-3)进行法律文本分析 💡 理解法律领域的特殊挑战(如法律术语、多语言处理、数据隐私) 💡 通过实战项目,开发一个合同分析应用 重点内容 * 法律领域NLP应用的主要场景 * 核心技术(合同分析、法律文本分类、案例检索) * 前沿模型(BERT、GPT-3)在法律领域的使用 * 法律领域的特殊挑战 * 实战项目:合同分析应用开发 一、法律领域NLP应用的主要场景 1.1 合同分析 1.1.1 合同分析的基本概念 合同分析是对合同文本进行分析和处理的过程。在法律领域,合同分析的主要应用场景包括: * 合同审查:自动审查合同(如“条款分析”、“风险评估”

阿里Qoder vs TRAE SOLO vs CodeBuddy IDE:三款国产AI IDE实战测评(附避坑指南)

阿里Qoder vs TRAE SOLO vs CodeBuddy IDE:三款国产AI IDE实战测评(附避坑指南) 最近两年,IDE的进化速度让人有点跟不上。从最初的代码补全,到能对话、能解释Bug,再到今天,AI已经能理解整个项目结构,甚至像个虚拟同事一样和你并肩作战。作为一名长期在一线折腾各种开发工具的程序员,我深切感受到,选择一款趁手的AI IDE,已经不再是“提升效率”那么简单,它直接关系到你的开发体验、项目架构的清晰度,甚至团队协作的模式。市面上打着“AI编程”旗号的产品层出不穷,但真正能深入理解项目、稳定交付复杂任务的,凤毛麟角。 这次,我把目光聚焦在三款备受关注的国产AI IDE上:阿里的Qoder、字节的TRAE SOLO和腾讯的CodeBuddy IDE。它们背后是三家顶级大厂,技术路线和产品理念各有千秋。我不打算复述官方宣传,而是准备用几个真实的、从简单到复杂的项目场景,把它们拉到同一个擂台上实战一番。我会从项目理解深度、代码生成质量、交互逻辑、