Go模板引擎安全漏洞全曝光:防止XSS攻击的8个关键措施

第一章:Go模板引擎安全漏洞全曝光:防止XSS攻击的8个关键措施

Go语言内置的模板引擎功能强大,广泛用于Web应用的动态页面渲染。然而,若使用不当,极易引发跨站脚本(XSS)攻击。Go模板默认启用了上下文感知的自动转义机制,但在实际开发中,开发者常因手动绕过转义或误解上下文类型而引入安全风险。

正确使用上下文自动转义

Go模板会根据输出上下文(HTML、JS、URL等)自动转义特殊字符。避免使用template.HTML等未转义类型处理用户输入。
// 安全做法:使用 template.HTML 要格外谨慎
data := struct {
    Content template.HTML // 仅当内容已可信且已清理时使用
}{Content: template.HTML("<strong>可信内容</strong>")}

避免手动拼接HTML字符串

手动拼接HTML会导致转义失效,应始终通过结构化数据传递内容,并由模板引擎处理渲染。
  • 不要在代码中使用字符串拼接生成HTML片段
  • 优先使用模板动作和管道进行逻辑控制
  • 对动态内容统一通过变量注入模板

设置严格的Content Security Policy

通过HTTP响应头限制脚本执行来源,降低XSS攻击成功率。
w.Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self' https://trusted.cdn.com")

验证并清理用户输入

在数据进入模板前进行净化处理,可借助如bluemonday等库过滤恶意标签。
输入类型推荐处理方式
纯文本直接传入模板,依赖自动转义
富文本使用 bluemonday 进行HTML清理

禁用不必要的模板函数

自定义模板函数可能破坏安全性,应移除或限制高危函数暴露。

使用静态分析工具检测风险

集成gosec等工具,在CI阶段扫描模板相关漏洞。

区分模板类型:text/template vs html/template

务必使用html/template进行HTML渲染,它提供上下文敏感的转义能力。

定期审计模板调用链

审查所有模板数据源,确保无未经转义的数据流入前端。

第二章:深入理解Go模板引擎与XSS攻击原理

2.1 Go模板引擎工作原理与上下文自动转义机制

Go 模板引擎通过解析模板文件,将占位符与数据上下文动态绑定,实现HTML、文本等内容的生成。其核心在于安全渲染,防止XSS攻击。
上下文感知的自动转义
模板根据输出上下文(如HTML、JS、URL)自动应用不同转义策略。例如在HTML上下文中,< 转义为 &lt;。
// 定义数据结构
type User struct {
    Name string
}
// 模板中使用 {{.Name}},若Name包含<script>将被自动转义
该机制确保即使传入恶意字符串,也会在HTML上下文中被安全处理。
转义上下文类型
  • HTML 文本节点:转义 <, >, &, ", '
  • JavaScript 内联脚本:避免闭合脚本标签
  • URL 查询参数:百分号编码特殊字符

2.2 XSS攻击类型剖析:存储型、反射型与DOM型在Go中的表现

XSS(跨站脚本)攻击根据触发机制可分为三类,在Go语言开发的Web应用中均有典型表现。
存储型XSS
恶意脚本被持久化存储在服务器上,用户访问时触发。常见于评论、用户资料等场景。
// 示例:未过滤用户输入导致存储型XSS
func saveComment(comment string) {
    db.Exec("INSERT INTO comments (content) VALUES (?)", comment) // 危险!
}
该代码直接将用户输入存入数据库,若前端直接渲染,将执行嵌入的JavaScript。
反射型与DOM型XSS
  • 反射型:恶意脚本通过URL参数传入,服务器将其反射回响应中
  • DOM型:仅在前端通过JavaScript操作DOM时触发,不涉及后端
防御核心在于输入过滤与输出编码,Go标准库html/template可自动转义:
import "html/template"
template.New("").Parse("{{.}}") // 自动HTML转义

2.3 模板注入与数据上下文混淆导致的安全风险

在动态页面渲染过程中,模板引擎常将用户输入与预定义模板结合。若未对数据上下文进行严格区分,攻击者可注入恶意表达式,触发模板注入漏洞。
常见漏洞场景
  • 用户输入直接嵌入模板,如用户名显示为 {{ username }}
  • 服务端使用危险函数求值表达式,如 eval() 或模板中的 {{ 7*7 }}
代码示例与分析
from jinja2 import Template
user_input = request.args.get('name')
template = Template("Hello " + user_input)
template.render()  # 若输入 {{ config.__class__.__init__.__globals__ }} 将泄露配置
上述代码未对用户输入进行转义或沙箱限制,导致攻击者可访问内部对象,造成敏感信息泄露。
缓解措施对比
措施说明
输入转义对特殊字符如 {、} 进行HTML实体编码
上下文隔离明确区分数据与指令边界,避免动态拼接模板

2.4 常见误用模式:unescaped字符串输出与HTML模板混合陷阱

在Web开发中,将未转义的字符串直接嵌入HTML模板是常见但危险的做法。这种行为极易引发XSS(跨站脚本)攻击,攻击者可通过注入恶意脚本操控页面行为。
典型漏洞场景
当动态数据未经处理插入HTML时,浏览器无法区分内容是合法文本还是可执行代码:
<div>用户评论:{{ userComment }}</div>
若 userComment 值为 <script>alert('xss')</script>,该脚本将在页面加载时执行。
安全编码实践
  • 始终对动态内容进行HTML实体编码,如将 < 转为 &lt;;
  • 使用模板引擎内置的自动转义功能,例如Go模板中的 {{.}} 默认已转义;
  • 明确区分可信任HTML与纯文本,仅对可信内容关闭转义。
var safeTemplate = `<div>{{.SafeHTML}}</div>`
t, _ := template.New("").Parse(safeTemplate)
t.Execute(buffer, map[string]interface{}{
    "SafeHTML": template.HTML("<b>加粗文本</b>"), // 显式声明安全HTML
})
上述代码通过 template.HTML 类型绕过自动转义,需确保其来源可信。

2.5 实战演示:构造一个可利用的XSS漏洞Go Web服务

本节将构建一个存在反射型XSS漏洞的Go语言Web服务,用于理解攻击形成机制。
服务端代码实现
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    fmt.Fprintf(w, "<html><body>Hello, %s!</body></html>", name)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
该代码未对用户输入进行任何转义,直接将URL参数name嵌入HTML响应体,形成XSS入口点。
攻击场景模拟
  • 正常访问:http://localhost:8080?name=Alice
  • 恶意载荷:http://localhost:8080?name=<script>alert('XSS')</script>
浏览器会执行脚本,弹出警告框,证明漏洞可被利用。

第三章:Go中上下文感知的输出转义实践

3.1 理解text/template与html/template的核心区别

Go语言标准库中的 text/template 和 html/template 虽然共享相同的模板语法和执行模型,但设计目标和安全机制存在本质差异。
基础功能对比
两者均支持数据注入与逻辑控制,例如:
package main

import "text/template"
import "os"

func main() {
    t := template.New("demo")
    t, _ = t.Parse("Hello, {{.}}!")
    t.Execute(os.Stdout, "World")
}
该代码使用 text/template 输出纯文本内容,适用于日志、配置文件生成等场景。
安全上下文处理
html/template 针对Web场景内置了自动转义机制,防止XSS攻击。例如:
import "html/template"

t, _ := template.New("safe").Parse("<div>{{.}}</div>")
t.Execute(w, "<script>alert(1)</script>")
此处恶意脚本会被自动转义为实体字符,确保浏览器不执行。
  • text/template:无自动转义,适合非HTML输出
  • html/template:强制上下文感知转义,保障Web安全

3.2 在HTML、JS、URL等上下文中正确使用转义函数

在Web开发中,不同上下文需要使用对应的转义函数以防止注入攻击。错误的转义方式可能导致安全漏洞。
常见上下文与转义方法
  • HTML内容:使用htmlspecialchars()(PHP)或textContent(JS)避免标签解析
  • JavaScript嵌入:应对单引号、双引号和换行符进行编码
  • URL参数:使用encodeURIComponent()确保特殊字符安全传输
代码示例

// 用户输入
const userInput = '<script>alert("xss")</script>';
// 正确插入HTML文本
document.getElementById('output').textContent = userInput;
// 错误方式(会触发XSS)
// document.getElementById('output').innerHTML = userInput;
上述代码中,textContent将用户输入视为纯文本,浏览器不会解析其中的脚本标签,有效防御XSS攻击。而innerHTML直接渲染为HTML,存在执行恶意脚本的风险。

3.3 自定义安全函数与contextual auto-escaping机制验证

在模板引擎中,contextual auto-escaping 能根据输出上下文自动转义特殊字符,有效防止 XSS 攻击。为增强安全性,常需引入自定义安全函数。
自定义安全函数实现
func safeURL(input string) string {
    parsed, err := url.Parse(input)
    if err != nil || (parsed.Scheme != "http" && parsed.Scheme != "https") {
        return "/safe"
    }
    return html.EscapeString(input)
}
该函数校验 URL 协议合法性,并对输出进行 HTML 转义,确保仅允许安全协议链接被渲染。
Contextual Auto-Escaping 验证场景
  • 在 HTML 文本上下文中,< 被自动转义为 &lt;
  • 在 URL 属性中,非安全 scheme(如 javascript:)被拦截
  • 通过自定义函数与自动转义协同,实现多层防护
结合类型感知转义与白名单校验,可显著提升模板渲染安全性。

第四章:构建安全的Go Web应用防护体系

4.1 使用html/template替代unsafe字符串拼接的最佳实践

在Go语言Web开发中,直接拼接HTML字符串极易引发XSS攻击。使用标准库html/template可自动转义输出内容,有效防止恶意脚本注入。
安全的数据渲染示例
// 定义模板
const templ = `<p>Hello, {{.Name}}!</p>`
t := template.Must(template.New("example").Parse(templ))

// 执行渲染
var buf bytes.Buffer
t.Execute(&buf, struct{ Name string }{Name: "<script>alert('xss')</script>"})
// 输出: <p>Hello, &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;!</p>
该代码通过template.Execute自动对特殊字符进行HTML转义,确保即使输入包含脚本标签,也会以纯文本形式展示。
常见转义规则对比
原始字符转义后
<&lt;
>&gt;
"&#34;

4.2 防御CSRF与XSS联动攻击的中间件设计模式

在现代Web应用中,CSRF与XSS的联动攻击构成了严重威胁。攻击者可通过XSS窃取CSRF Token,继而伪造请求。为此,需设计具备双重防御能力的中间件。
双因子Token验证机制
采用“同步Token模式”结合“SameSite Cookie”策略,确保请求来源可信。服务器生成加密Token并嵌入响应头与表单,中间件校验请求中Token的一致性。
// Go中间件示例:CSRF防护
func CSRFMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.Method == "POST" {
            token := r.PostFormValue("csrf_token")
            sessionToken, _ := getSession(r, "csrf_token")
            if token != sessionToken {
                http.Error(w, "Invalid CSRF Token", http.StatusForbidden)
                return
            }
        }
        next.ServeHTTP(w, r)
    })
}
该代码通过比对表单提交的Token与会话中存储的Token,阻断非法请求。关键参数csrf_token需使用加密随机数生成,并设置HttpOnly与Secure标志的Cookie辅助保护。
内容安全策略(CSP)集成
中间件注入CSP头,限制脚本执行源,有效缓解XSS:
  • 阻止内联脚本执行
  • 仅允许白名单域名加载资源
  • 上报异常行为至监控端点

4.3 内容安全策略(CSP)在Go服务器端的集成方案

内容安全策略(CSP)是一种关键的防御机制,用于缓解跨站脚本(XSS)、数据注入等攻击。在Go语言构建的Web服务中,可通过中间件方式集成CSP头信息,精准控制资源加载行为。
CSP响应头设置示例
func CSPMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Security-Policy", 
            "default-src 'self'; "+
            "script-src 'self' 'unsafe-inline'; "+
            "style-src 'self' 'unsafe-inline'; "+
            "img-src 'self' data:; "+
            "font-src 'self'; object-src 'none'")
        next.ServeHTTP(w, r)
    })
}
上述代码通过自定义中间件设置CSP头,限制资源仅从自身域加载,禁止插件对象执行(object-src 'none'),并允许内联样式与脚本(生产环境建议移除unsafe规则)。
常用指令说明
  • default-src:默认资源加载策略
  • script-src:JavaScript执行源限制
  • style-src:CSS样式表加载源
  • img-src:图像资源允许来源
  • font-src:字体文件加载策略

4.4 安全响应头设置与模板数据最小化暴露原则

在Web应用中,合理配置HTTP安全响应头是防御常见攻击的重要手段。通过设置如`Content-Security-Policy`、`X-Content-Type-Options`等头部,可有效缓解XSS、MIME嗅探等风险。
关键安全头配置示例
r.Use(func(c *gin.Context) {
    c.Header("X-Content-Type-Options", "nosniff")
    c.Header("X-Frame-Options", "DENY")
    c.Header("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
    c.Header("Content-Security-Policy", "default-src 'self'; img-src 'self' data:")
    c.Next()
})
上述代码通过Gin框架中间件统一注入安全头。`nosniff`防止浏览器推测MIME类型,`DENY`阻止页面被嵌套在iframe中,`Strict-Transport-Security`强制HTTPS通信,CSP限制资源加载源,降低恶意脚本执行风险。
模板数据最小化暴露
仅向模板传递必要字段,避免将完整结构体或敏感元数据暴露给前端。使用专门的视图模型(ViewModel)裁剪输出内容,减少信息泄露面。

第五章:总结与展望

技术演进的持续驱动
现代软件架构正朝着更轻量、高可用的方向发展。以 Kubernetes 为例,其声明式 API 和控制器模式已成为云原生基础设施的核心。在实际生产环境中,通过自定义资源定义(CRD)扩展集群能力已成为常见实践。
代码即配置的落地案例

// 自定义控制器监听 CRD 变更
func (c *Controller) handleAdd(obj interface{}) {
    cr := obj.(*v1alpha1.MyApp)
    log.Printf("Reconciling MyApp: %s", cr.Name)
    
    // 确保 Deployment 存在
    if !deploymentExists(cr) {
        createDeployment(cr)
    }
    
    // 同步服务状态
    updateStatus(cr)
}
可观测性体系构建
完整的监控闭环需包含日志、指标与链路追踪。某金融客户通过以下组合实现系统透明化:
  • Prometheus 抓取微服务指标
  • Loki 集中收集结构化日志
  • Jaeger 追踪跨服务调用链
  • Grafana 统一展示关键面板
未来架构趋势预判
技术方向当前成熟度典型应用场景
Serverless 容器逐步成熟突发流量处理
WASM 边缘计算早期探索CDN 上运行逻辑
[Service] → [API Gateway] → [Auth Middleware] → [Business Logic] ↓ [Event Bus] → [Worker Pool]
YOLOv8作物病害检测实战源码 这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。 立即下载

相关推荐

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

XSS基础环境及实验演示教程(适合新手)

花了一点时间,做了一个“XSS基础环境及实验演示教程”,当然教程很简单,适合刚接触和安全行业的小伙伴去认识了解XSS漏洞,并且上手实操。

流浪法师的博客 1760

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

XSS攻防前线:Go开发者必须掌握的5种输入过滤技术

掌握Go XSS防护核心技术,有效防御常见XSS攻击。本文介绍5种实用输入过滤方法,涵盖HTML转义、上下文输出编码、CSP策略等,适用于Web开发中表单、API等场景,提升应用安全性。方法简洁高效,值得收藏。

LogicGap的博客 454

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

存储型 XSS 攻击深度解析:原理、场景、防御与实战案例

存储型 XSS(Stored Cross-Site Scripting),又称持久化 XSS,是危害级别最高的 XSS 攻击类型。恶意脚本存储于服务器端:如数据库、文件系统等持久化存储介质。自动触发攻击:用户访问页面时,服务器主动读取并渲染包含恶意脚本的内容,无需依赖用户点击特定链接。攻击链示意图攻击者 ---------> 向服务器提交包含恶意脚本的内容(如评论、发帖)↓服务器 -------> 将恶意内容存储至数据库↓。

m0_57836225的博客 4273

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

XSS 攻击(详细)

XSS,即跨站脚本攻击,是 Web 安全领域中十分常见的漏洞类型。攻击者通过在 Web 页面中注入恶意脚本,当用户浏览该页面时,恶意脚本便会在用户的浏览器中执行。借助这种攻击方式,攻击者能够窃取用户的敏感信息,如登录凭证、个人隐私数据等;劫持用户会话,以用户身份进行各种操作;甚至篡改网站内容,严重损害网站的声誉和用户信任。举例来说,某电商网站若存在 XSS 漏洞,攻击者可通过注入恶意脚本,窃取用户的账号密码,进而盗刷用户的账户资金,给用户带来直接的经济损失。

FFNCL的博客 7838

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

C# 原生数字孪生的尝试

本文介绍了使用C#实现数字孪生的基本思路。首先从爱普生官网下载机器人3D模型,然后通过Blender创建并导出带动画的FBX模型。在WPF项目中,使用HelixToolkit.SharpDX等插件加载模型,通过Viewport3DX进行3D渲染。关键点是通过动画控制器接收真实设备信号来驱动模型动画,实现物理实体与虚拟模型的同步。文中提供了完整的代码实现,包括模型导入、动画播放控制等核心功能。该方法为构建数字孪生系统提供了一种可行的技术方案。

qq_33529095的博客 1333

XSS POC

xss xss 作为owasp top 10 之一, xss 被称为跨站脚本攻击 xss 危害: 1.盗取各种用户帐号 2.窃取用户cookie资料,冒充用户身份进入网站 3.劫持用户会话,执行任意操作 4.刷流量,执行弹窗广告 5.传播蠕虫病毒 xss漏洞发生在 ...

qq_43616736的博客 2504

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6155

Xss跨站脚本攻击

因为XSS Payload的强大,也是为了使用的方便,有安全研究者将许多功能封装了起来做成了XSS平台。也是因为插入点一般都有长度限制,所以说xss一般攻击都需要外链。跨站脚本攻击,是代码注入的一种,它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。这里我们用http://xsscom.com/来演示。第二个是原本程序要执行的代码,拼接了用户输入的数据。目的是每隔一段时间访问网站,是否获取到cookie。,为了快速测试我们在所以输入框中都插入。提交后我们发现,在主题处是存在漏洞的。

qq_52108058的博客 1276

python 爬取携程全国旅游景点信息-2024.4.13

携程网是中国领先的在线旅行服务公司,提供酒店预订、机票预订、旅游度假、商旅管理等服务。携程网上有大量的旅游景点和酒店信息,这些信息对于旅行者和旅游业者都有很大的价值。通过爬虫技术,我们可以从携程网上获取这些信息,并进行数据清洗、数据分析、数据可视化等操作,从而得到有用的洞察和建议。

britlee的博客 1万+

su03t语音模块烧录识别不出问题解决方法

su03t语音sdk烧录无法识别问题

weixin_49387645的博客 6389

前端安全 — XSS攻击的分类、XSS攻击的预防

目录 什么是XSS XSS分类 存储型XSS 存储型XSS的攻击步骤: 反射型XSS 反射型XSS的攻击步骤: DOM型XSS DOM型XSS的攻击步骤: XSS攻击的预防 输入过滤 预防存储型和反射型XSS攻击 纯前端渲染 转义HTML XSS攻击的总结 以下原则减少漏洞的产生: 利用模板引擎: 避色内联重件 避免拼接HTML 时刻保持警惕 主动检测和发现 什么是XSS Cross-Site Scripting (跨站脚本攻击)简称XSS,是-种代码注.

csdssdn的博客 1846

电子元器件-接口电路篇:RS-232、RS485/422、I2C、SPI、USB、网口

以上规定说明了RS-232C 标准对逻辑电平的定义。对于数据(信息码):逻辑“1”的传输的电平为-3V~-15V,逻辑“0”传输的电平为+3V~+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V~+15V,断开状态(OFF)即信号无效的电平为-3V~-15V,也就是当传输电平的绝对值大于3V 时,电路可以有效地检查出来;

qq_60226558的博客 887

xss注入万能模板

简单弹窗:<script>alert(1)</script>反射cookie:<script>alert(document.cookie)</script>事件:onclick=alert(1)<img src=1 onerror=alert(1)跨站引用:<script scr="http://xxxxxx.com/xxx.php?xx...

weixin_43553654的博客 767

127.手机防回滚机制(Anti-Rollback)详解|efuse熔丝原理与降级绕过方案

手机刷机与维修技术指南 本文针对电子工程师和维修人员,详细介绍了主流手机品牌(高通、联发科、苹果)的刷机原理与维修方法。内容包括三大平台的刷机协议差异、关键操作模式(Fastboot/DFU/EDL)、分区表修复等核心技术,并提供了完整的Python自动化刷机脚本。文章重点解决系统崩溃、基带丢失、分区损坏等常见故障,涵盖从环境搭建到具体操作的全流程指导,所有指令均经过实测验证。适用于专业维修场景下的跨品牌设备修复需求。

2601_95651806的博客 292

Auto.js实现视频号点赞自动化

摘要:本文介绍了一个微信视频号自动化点赞的实现方案。通过定位点赞图标和数量容器,点击点赞按钮后检测点赞数变化,若发现取消点赞则自动补点。核心代码包括:1)获取点赞容器和图标;2)记录点赞前后数量;3)判断是否误取消并补点;4)循环执行点赞和滑动页面操作。该方案解决了滑动页面可能导致误取消点赞的问题,实现了自动化批量点赞功能。文章强调仅供学习参考,提醒勿滥用该技术。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2575

ES6-模板字符串(标签模板-XSS攻击)

1. 模板字符串 保存字符串中的格式 使用变量/常量或者表达式/方法 2. 标签模板 函数调用的特殊形式 使用形式 过滤HTML字符串 防XSS攻击 1. 模板字符串 ES6中引入的新的声明字符串的方式 xxxxx ES5声明字符串的方式 '' 和 "" 保存字符串中的格式 可以在内容中出现换行符 var str = ` <div>1</div> <div>2</div> <p>3</p&..

爱代码的小海的博客 693

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

XSS攻击

XSS是什么 Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。 为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。 一、XSS注入的方法: 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字

weixin_46015266的博客 401

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【应用安全之xss二】xss攻击介绍和防范(前端)

本文我们会讲解 XSS ,主要包括: XSS 攻击的介绍 XSS 攻击的分类 XSS 攻击的预防和检测 XSS 攻击的总结 XSS 攻击案例 XSS 攻击的介绍 在开始本文之前,我们先提出一个问题,请判断以下两个说法是否正确: XSS 防范是后端 RD(研发人员)的责任,后端 RD 应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。 所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。 如果你还不能确定答案,那么可以带

qq_35789269的博客 3904

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

前端防XSS攻击——模板字面量(模板字符串)之模板标签的应用

一.简介模板字面量(即模板字符串,MDN已更新为"模板字面量"的说法,此文以后都用“模板字面量”)ES6中引入了模板字面量来代替传统JS的输出模板,直接看代码最清楚吧模板字面量:&lt;div id="es6"&gt;&lt;/div&gt; &lt;script&gt; var es6 = document.querySelector('#es6'); var es6words = '我是es6...

a695993410的博客 1827
上一篇: 【前端开发者必看】:ES6十大新特性深度剖析,错过等于降薪30%
下一篇: Go项目安全防护全解析,揭秘金融级应用必备的8道安全防线
SimProceed
博客等级 码龄1年 146粉丝 2011原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值