news 2026/5/13 12:21:54

Web安全:XSS跨站脚本攻击详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Web安全:XSS跨站脚本攻击详解

Web安全:XSS跨站脚本攻击详解

1. XSS概述

XSS(Cross-Site Scripting)是一种代码注入攻击,攻击者通过在网页中注入恶意脚本代码,当用户浏览该页面时,恶意代码会在用户浏览器中执行,从而盗取用户信息、劫持会话等。

2. XSS类型

2.1 反射型XSS

非持久化攻击,恶意代码作为用户请求参数被服务器返回:

// 不安全的实现 func handleSearch(c *gin.Context) { query := c.Query("q") // 直接将用户输入返回,没有转义 c.HTML(200, "search.html", gin.H{ "query": query, }) }

2.2 存储型XSS

恶意代码被永久存储在服务器端:

// 不安全的评论功能 func postComment(c *gin.Context) { comment := c.PostForm("comment") // 直接存储用户输入,没有过滤 db.Exec("INSERT INTO comments (content) VALUES (?)", comment) }

2.3 DOM型XSS

完全在客户端执行,不涉及服务器:

// 不安全的JavaScript代码 document.getElementById("output").innerHTML = location.hash;

3. XSS防护措施

3.1 输入过滤

import "github.com/microcosm-cc/bluemonday" func sanitizeInput(input string) string { p := bluemonday.UGCPolicy() return p.Sanitize(input) } // 使用 func handleComment(c *gin.Context) { comment := c.PostForm("comment") sanitized := sanitizeInput(comment) db.Exec("INSERT INTO comments (content) VALUES (?)", sanitized) }

3.2 输出编码

import "html" func escapeOutput(input string) string { return html.EscapeString(input) } // HTML模板中使用 func renderUserInput(c *gin.Context) { input := c.Query("input") c.HTML(200, "output.html", gin.H{ "input": html.EscapeString(input), }) }

3.3 Content Security Policy

func CSPMiddleware() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Content-Security-Policy", "default-src 'self'; "+ "script-src 'self' 'unsafe-inline'; "+ "style-src 'self' 'unsafe-inline'; "+ "img-src 'self' data:;") c.Next() } }

3.4 HTTPOnly和Secure Cookie

import "github.com/gin-gonic/gin/sessions" session := sessions.Default(c) session.Options(sessions.Options{ Path: "/", MaxAge: 86400 * 7, HttpOnly: true, // 防止JavaScript访问Cookie Secure: true, // 仅在HTTPS传输 SameSite: http.SameSiteStrictMode, })

4. 前端XSS防护

4.1 React自动防护

React自动转义JSX中的表达式:

// React会自动转义 const userInput = "<script>alert('xss')</script>"; return <div>{userInput}</div>;

4.2 Vue防护

<!-- Vue也会自动转义 --> <template> <div>{{ userInput }}</div> </template> <!-- 使用v-html需要谨慎 --> <div v-html="unsafeContent"></div>

5. 安全工具

5.1 OWASP ZAP

自动化Web应用安全扫描工具:

# Docker运行ZAP docker run -t owasp/zap2docker-stable zap-baseline.py -t https://example.com

5.2 扫描工具集成

# GitHub Actions集成安全扫描 name: Security Scan on: [push] jobs: zap-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: ZAP Baseline Scan uses: zaproxy/action-baseline@v0.7.0 with: target: 'https://example.com'

6. 总结

XSS是常见的Web安全漏洞,通过输入过滤、输出编码、Content Security Policy等措施可以有效防护。开发时应始终假设用户输入是不可信的,并采取相应的安全措施。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 12:21:23

开源AI模型本地部署实战:从Hugging Face社区模型到私有化部署

1. 项目概述&#xff1a;从“Glucksberg/cristalina-v4”看开源AI模型社区化部署 最近在折腾本地AI部署的朋友&#xff0c;可能都绕不开Hugging Face这个“模型大本营”。今天想聊的&#xff0c;不是某个耳熟能详的GPT或Llama&#xff0c;而是一个在社区里逐渐有了些热度的名字…

作者头像 李华
网站建设 2026/5/13 12:19:42

Arkloop开源AI智能体平台:本地部署、多模型路由与沙箱执行实战

1. 项目概述与核心价值 最近在折腾AI智能体&#xff0c;发现市面上的平台要么是闭源的SaaS&#xff0c;用起来总感觉数据不在自己手里&#xff0c;心里不踏实&#xff1b;要么就是开源项目部署起来极其复杂&#xff0c;光是配环境、调参数就能劝退一大半人。直到我遇到了Arklo…

作者头像 李华
网站建设 2026/5/13 12:19:40

【接口测试实战】Postman+Newman构建IHRM项目自动化测试与报告生成

1. 为什么选择PostmanNewman做接口自动化测试 最近在给公司的人力资源管理系统&#xff08;IHRM&#xff09;做接口自动化测试时&#xff0c;我对比了市面上多种方案&#xff0c;最终选择了PostmanNewman这套组合。原因很简单&#xff1a;这套工具链不仅上手快&#xff0c;而且…

作者头像 李华
网站建设 2026/5/13 12:14:46

第十章:C++ 迷你单元测试框架

第十章:C++ 迷你单元测试框架 本章从"写业务"切换到"写工具"。前 9 个案例都是给最终用户看的应用;本案例要做的是给其他程序员用的库——一个百行代码、头文件 only 的单元测试框架(类似 Catch2 的最小骨架)。你将集中练习三件被前 9 个案例覆盖不到位…

作者头像 李华
网站建设 2026/5/13 12:12:11

3大照片管理痛点,1个工具彻底解决:ExifToolGUI完全指南

3大照片管理痛点&#xff0c;1个工具彻底解决&#xff1a;ExifToolGUI完全指南 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾面对数百张旅行照片&#xff0c;需要统一修改拍摄时间却无从下手&…

作者头像 李华