GoFrame 模板引擎对变量转义输出- XSS 漏洞

环境:

  • gf v1.14.4
  • go 1.11

官网说明

默认情况下,模板引擎对所有的变量输出并没有使用HTML转码处理,也就是说,如果开发者处理不好,可能会存在XSS漏洞。

不用担心,GF框架当然已经充分考虑到这点,并且为开发者提供了比较灵活的配置参数来控制是否默认转义变量输出的HTML内容。该特性可以通过AutoEncode配置项,或者SetAutoEncode方法来开启/关闭。

需要注意的是,该特性并不会影响include模板内置函数。

使用示例:

  1. 配置文件

    copy

     [viewer]
    delimiters = ["${", "}"]
    autoencode = true
  2. 示例代码

    copy

     package main
    
     import (
    "fmt"
    "github.com/gogf/gf/frame/g"
    ) func main() {
    result, _ := g.View().ParseContent("姓名: ${.name}", g.Map{
    "name": "<script>alert('john');</script>",
    })
    fmt.Println(result)
    }
  3. 执行输出

    copy

     姓名: &lt;script&gt;alert('john');&lt;/script&gt;

那么如果需要进行不转义输出html内容,除了上面得到的不受影响情况(使用include模板内置函数)外,还有吗?

其实还有一个Go原生提供的template.HTML()方法:

func GetSummary(r *ghttp.Request)  {
//测试 gf 模板 动作符号已修改为: ${}
err := r.Response.WriteTpl("readArticle.html", g.Map{
//开启 autoencode = true 配置之后会安全编码,转义所有 html js
"testText": template.HTML("<h1>编码h1?</h1>"),
})

注意此时配置文件已经开启转义输出html内容:

[viewer]
autoencode = true

或者可以通过方法开启:

func main() {
g.Server().Run()
//开启 autoencode 配置之后会安全编码,转义所有 html js
g.View().SetAutoEncode(true)
}

访问处理方法下的路径:

即可成功输出html内容,但是此时会存在XSS漏洞。

GoFrame 模板引擎对变量转义输出- XSS 漏洞的更多相关文章

  1. django模板引擎自定义变量

    定义临时变量: {% with i=1 %} {{i}} {% endwith %} 定义对临时变量操作的tag 在templatetags中创建set_val.py 内容是 from django ...

  2. swig模板引擎和ejs模板引擎

    swig模板引擎的基本用法: 1. 变量 {{ name }}  //name名前后必须要加空格,不加就会报错 2. 属性 {{ student.name }} 3. 模板继承 swig使用exten ...

  3. Jade(Pug) 模板引擎使用文档

    本篇内容 在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includ ...

  4. Handlebars模板引擎之进阶

    取得索引 我想取得索引作为序号这个是常用的.在handlebars也是存在的. 就是使用 @index 来获取索引 {{#each this}} <tr> <td>{{ @in ...

  5. nodejs jade 模板 引擎的使用方法

    1.新建项目 2.使用模板引擎 app.set('view engine','jade'); 3.使用render渲染一个视图 res.render(用于指定需要被渲染的视图(必选),本地变量(可选) ...

  6. Jade 模板引擎使用

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  7. Jade模板引擎使用详解

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  8. PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究

    PHP 转义 实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码. 我们可以使用前面提到的 htmlen ...

  9. web框架详解之 tornado 四 模板引擎、session、验证码、xss

    一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...

随机推荐

  1. PLC扩展模拟量输入模块是什么

    PLC模拟量输入模块就是采集电压.电流.热电阻.热电偶或者是温度等模拟量的采集模块,然后再通过总线传输到电脑上的智能模块.其实就是一款将远程现场的模拟量信号采集到计算机的设备,模拟量是表示了在一定的范 ...

  2. 《Clojure编程》笔记 第2章 函数式编程

    目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...

  3. 「SHOI2015」超能粒子炮・改

    「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...

  4. 3.2 表 ADT -3.3 Java Collection API 中的表

    3.2 表 ADT 处理形如 A0, A1, A2, --, AN-1 的一般的表.我们称这个表大小为N.将大小为0的特殊表称为空表 对于除空表以外的任何表,称 Ai-1 前驱 Ai,Ai 后继 Ai ...

  5. Cassandra数据模型和模式(Schema)的配置检查

    免责声明 本文档提供了有关DataStax Enterprise(DSE)和Apache Cassandra的常规数据建模和架构配置建议.本文档需要DSE / Cassandra基本知识.它不能代替官 ...

  6. Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up

    报错截图 在Linux下直接运行jenkins.war报错,导致启动失败 报错原因 运行端口已被其他进程占用 解决方法 换个启动端口就可以啦!

  7. c语言 :write与read系统调用总结

    在学习的时候总是有点迷糊于是在网上找到一些比较好的分享一下  下面举一个例子: 1 #include <stdio.h> 2 #include <unistd.h> 3 #in ...

  8. Spring5.0源码学习系列之浅谈循环依赖问题

    前言介绍 附录:Spring源码学习专栏 在上一章的学习中,我们对Bean的创建有了一个粗略的了解,接着本文浅谈Spring循环依赖问题,这是一个面试比较常见的问题 1.什么是循环依赖? 所谓的循环依 ...

  9. 栈(Stack)和队列(Queue)是两种操作受限的线性表。

    (线性表:线性表是一种线性结构,它是一个含有n≥0个结点的有限序列,同一个线性表中的数据元素数据类型相同并且满足"一对一"的逻辑关系. "一对一"的逻辑关系指的 ...

  10. xenserver使用ceph的rbd的方法

    首先安装的xenserver6.5的环境,看到有地方有提到这个上面可以安装rbd的支持,网上有一种方式是libvirt+kvm方式,因为ceph对libviet是原生支持的,但是xenserver底层 ...