Web安全:XSS跨站脚本攻击详解
Web安全XSS跨站脚本攻击详解1. XSS概述XSSCross-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 Policyfunc 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 Cookieimport 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 scriptalert(xss)/script; return div{userInput}/div;4.2 Vue防护!-- Vue也会自动转义 -- template div{{ userInput }}/div /template !-- 使用v-html需要谨慎 -- div v-htmlunsafeContent/div5. 安全工具5.1 OWASP ZAP自动化Web应用安全扫描工具# Docker运行ZAP docker run -t owasp/zap2docker-stable zap-baseline.py -t https://example.com5.2 扫描工具集成# GitHub Actions集成安全扫描 name: Security Scan on: [push] jobs: zap-scan: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: ZAP Baseline Scan uses: zaproxy/action-baselinev0.7.0 with: target: https://example.com6. 总结XSS是常见的Web安全漏洞通过输入过滤、输出编码、Content Security Policy等措施可以有效防护。开发时应始终假设用户输入是不可信的并采取相应的安全措施。