谷歌发布实验性可信类型API,用于解决跨站点脚本漏洞

2019 年 3 月 23 日

谷歌发布实验性可信类型API,用于解决跨站点脚本漏洞

谷歌 Chrome 团队发布了实验性可信类API,用以解决 DOM 跨站点脚本(Cross-Site Scripting,简称 XSS)安全漏洞。谷歌的漏洞赏金计划报告说 DOM XSS 是最常见的 XSS 安全变种。


谷歌软件安全工程师 Krzysztof Kotowicz 解释了开发人员在 XSS 方面所面临的挑战:


实践证明,维护无XSS的应用程序仍然是个严峻的挑战,尤其是当应用程序很复杂时。尽管防止服务器端XSS的解决方法已经是众所周知的,但基于DOM的跨站点脚本(DOM XSS)问题却日益严峻。


挑战在于,引入 XSS 十分容易,但难以检测到。


可信类型可以从根源上解决这些 XSS 问题,有助于消除 DOM XSS 漏洞。


可信类型允许开发人员锁定危险的注入池,在默认情况下它们是安全的,而且不能用字符串进行调用。可以通过内容安全策略(Content Security Policy,简称 CSP)HTTP 响应标头 Content-Security-Policy: trusted-types *来设置可信类型。


这样就避免了 XSS 的常见来源,例如这个来自谷歌的示例:


const templateId = location.hash.match(/tplid=([^;&]*)/)[1];// typeof templateId == "string"document.head.innerHTML += templateId // Throws a TypeError.
复制代码


可信类型引入了一个新的全局变量,所以我们可以直接使用这个变量,而不是通过策略来设置:


const templatePolicy = TrustedTypes.createPolicy('template', {  createHTML: (templateId) => {    const tpl = templateId;    if (/^[0-9a-z-]$/.test(tpl)) {      return `<link rel="stylesheet" href="./templates/${tpl}/style.css">`;    }    throw new TypeError();  }});
const html = templatePolicy.createHTML(location.hash.match(/tplid=([^;&]*)/)[1]);// html instanceof TrustedHTMLdocument.head.innerHTML += html;
复制代码


模板策略在创建 HTML 之前会验证传给它的模板 ID 参数。该策略对象将用户定义的 createHTML 函数封装在可信类型对象中 。除了验证 templateId 对修复 XSS 有效外,现在可能引入 DOM XSS 漏洞的代码只有策略代码,从而减少审查代码库中与检测 DOM XSS 安全问题有关的区域。


目前,可信类型包括 HTML、URL、ScriptURL 和 Script。可信类型的 CSP 可能被限制于一个或所有可信类型策略。


开发人员可以在实时网站或 Web 应用程序中尝试可信类型,方法有:注册Trusted Types Origin Trial 、通过命令行


chrome --enable-blink-features=TrustedDOMTypes 在本地安装的 Chrome 中启用该功能、在 Chrome 中打开


chrome://flags/#enable-experimental-web-platform-features。


现在还有可信类型 polyfill,用于在其他浏览器中尝试该功能。polyfill 有两种变体,其中一种只支持 API,包含可信类型的代码库仍然可以在老版本的浏览器中运行;另一种支持基于文档中的 CSP 策略在 DOM 中强制执行类型。这里有一个使用可信类polyfill的示例。


问题和反馈可以报告给WICG可信类GitHub项目,或者在可信类谷歌小组中讨论。欢迎开发者通过WICG贡献指南对可信类型规范做出贡献。


查看英文原文:Experimental Trusted Types API to Combat Cross-Site Scripting Vulnerabilities


2019 年 3 月 23 日 08:003419
用户头像

发布了 199 篇内容, 共 64.9 次阅读, 收获喜欢 270 次。

关注

评论

发布
暂无评论
发现更多内容

Java源码系列3——LinkedHashMap

超超不会飞

Java

Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?

超超不会飞

Java

架构师训练营第 1 期第 3 周学习总结

好吃不贵

极客大学架构师训练营

Nexmark: 如何设计一个流计算基准测试?

Apache Flink

flink

GitHub上标星68k,基于SpringBoot+Netty分布式开源的即时通讯系统项目

Java架构之路

Java 程序员 编程语言 Netty 项目实战

基于 Flink + Hive 构建流批一体准实时数仓

Apache Flink

flink

一个Hibernate的事务问题

YoungZY

hibernate

太牛了,这份神仙级面试笔记把所有 Java 知识面试题都详解出来了

Java架构之路

Java 程序员 面试 编程语言

2020HC大会上,这群人在讨论云原生…

华为云开发者社区

华为 华为云 大会

开源=免费?

Philips

开源 开源项目 开源代码 开源社区

Smartisan

Changing Lin

摄影

我一定是熬夜熬傻了,小程序后台获取用户信息居然发生了这件事

小Q

Java 小程序 学习 编程 架构

阿里内部超流行的“SpringBoot+ 微服务指南”,理论与实战双管齐下

Java架构之路

Java 程序员 微服务 Spring Boot 编程语言

LeetCode题解:242. 有效的字母异位词,数组排序,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

关于 UML 类图

西贝

UML 图表

码住!Flink Contributor 速成指南

Apache Flink

flink 开源社区

烦人的Null,你可以走开点了

四猿外

Java 注解 空指针 Optional null

在 InfoQ 兼职做运营

邓瑞恒Ryan

创业 用户增长 创业心态 运营 产品运营

架构师训练营 1 期 - 第三周 - 设计模式

三板斧

极客大学架构师训练营

第三周学习代码重构总结

三板斧

极客大学架构师训练营

一个草根的日常杂碎(9月29日)

刘新吾

随笔杂谈 生活记录 社会百态

极光无限:用AI赋能安全 解决安全行业人才紧缺难题

风向标

人工智能

架构师训练营 - 作业 - 第二周

Max2@12

谈谈测试

得大自在

测试的价值 测试文化 测试落地

Dromara团队发布Hmily全新架构的2.1.1版本

猫大人

分布式事务 分布式柔性事务‘’

2020互联网公司中秋礼盒大比拼!(文末送福利)

Java架构师迁哥

国内上市进程或将提速!百度宣布小度科技独立融资

脑极体

上手深度学习之前,我们先聊聊“数学”

华为云开发者社区

神经网络 学习 数学

技术解读丨目标检测之RepPoints系列算法

华为云开发者社区

算法 神经 目标检查

传统网络缺失货币层,比特币是否能担此大任?

blockchain

比特币 区块链 数字货币 比特币数字货币 区块俩金融

单例模式

高兵

谷歌发布实验性可信类型API,用于解决跨站点脚本漏洞-InfoQ