title: useHeadSafe:安全生成HTML头部元素

date: 2024/7/17

updated: 2024/7/17

author: cmdragon

excerpt:

摘要:“useHeadSafe”是Vue.js组合函数,用于安全生成HTML头部元素,通过限制输入值格式避免XSS等安全风险,提供了安全值白名单确保只有安全属性被添加。

categories:

  • 前端开发

tags:

  • 安全
  • 编程
  • Vuejs
  • HTML
  • XSS
  • 前端
  • 组件



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

在构建网站时,我们常常需要在HTML文档的头部添加各种元信息,如<meta>标签、<script>标签、<link>

标签等,这些信息对于搜索引擎优化、页面加载性能优化、以及用户交互体验都至关重要。然而,直接在JavaScript中动态生成HTML头部元素时,可能会引入安全风险,比如XSS(跨站脚本攻击)。

useHeadSafe是一个用于安全生成HTML头部元素的Vue.js组合函数,它通过限制输入值为安全的格式,避免了潜在的安全风险。

安全使用useHeadSafe

useHeadSafe函数的使用方式与useHead

类似,但其核心功能在于确保所有输入的数据都是安全的,避免了直接使用用户输入数据时可能带来的安全风险。以下是如何使用useHeadSafe

的基本语法:

import { useHeadSafe } from 'unhead'

export default {
setup() {
const headData = {
script: [
{ id: 'xss-script', innerHTML: 'alert("xss")' }
],
meta: [
{ 'http-equiv': 'refresh', content: '0;alert(1)' }
]
} const { head } = useHeadSafe(headData) // 使用生成的头部元素
return {
head
}
}
}

安全值白名单

useHeadSafe函数内部使用了安全值白名单,确保只有白名单内的属性可以被添加到HTML元素中。以下是白名单的详细内容:

  • htmlAttrsid,class,lang,dir
  • bodyAttrsid,class
  • metaid,name,property,charset,content
  • noscriptid,textContent
  • scriptid,type,textContent
  • **link

    **:id,color,crossorigin,fetchpriority,href,hreflang,imagesrcset,imagesizes,integrity,media,referrerpolicy,rel,sizes,type

示例:创建一个简单的登录页面

假设我们正在创建一个简单的登录页面,需要在页面加载时自动刷新页面,同时添加一个安全的<script>

标签来执行一些JavaScript代码。我们可以这样使用useHeadSafe

<template>
<div>
<h1>登录页面</h1>
<!-- 页面内容 -->
</div>
</template> <script> export default {
setup() {
// 定义头部信息
const headData = {
title: '登录',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '登录页面' },
],
script: [
{ src: 'https://example.com/login.js', async: true },
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
],
}; // 使用useHeadSafe确保头部信息的安全
const { head } = useHeadSafe(headData); // 返回head对象,以便在模板中使用
return {
head,
};
},
};
</script>

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:useHeadSafe:安全生成HTML头部元素 | cmdragon's Blog

往期文章归档:

useHeadSafe:安全生成HTML头部元素的更多相关文章

  1. vscode笔记(一)- vscode自动生成文件头部注释和函数注释

    VsCode 自动生成文件头部注释和函数注释 作者:狐狸家的鱼 本文链接:vscode自动生成文件头部注释和函数注释 GitHub:sueRimn 1.安装插件KoroFileHeader 2.设置 ...

  2. HTML块元素,行内元素,类,头部元素

    总结HTML块元素,行内元素,类,头部元素 块元素: 在HTML中,块级元素的高度为其内容的高度,宽度会扩展到与父容器同宽.默认情况下,块级元素会独占一行,并且元素前后行留空. 示例:<h1&g ...

  3. 表单组件 form fastadmin(生成表单元素)

    Form组件 定义文件位置: /extend/fast/Formphp 通用参数 $name 通常为我们组件的名称(name属性值),我们在后台接收时可以通过这个名称来获取到它所对应的值 $value ...

  4.  sublime text3快速生成html头部信息(转)

    sublime text3快速生成html头部信息  https://blog.csdn.net/sunshinegirl_7/article/details/49802579 经常见别人创建新的ht ...

  5. sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法

    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法: 需要下载Emmet插件,按网上写的步骤按ctrl+shift+P打开命令面板,输入install,鼠标点击 ...

  6. Iphone上对于动态生成的html元素绑定点击事件$(document).click()失效解决办法

    在Iphone上,新生成的DOM元素不支持$(document).click的绑定方法,该怎么办呢? 百度了N久都没找到解决办法,在快要走投无路之时,试了试Google,我去,还真找到了,歪国人就是牛 ...

  7. 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

    zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...

  8. sublime text3快速生成html头部信息

    1.在网站开发过程中尤其写前台页面时要写头部很麻烦,怎么办呢?直接生成不更好吗? 这是快速生成的信息 2.方法: ctrl+shift+P打开命令面板 点击安装控制器 3.输入emmet 安装(以下图 ...

  9. sublime3中如何快速生成html头部信息

    前提要安装Emmet 插件:已经结束了啊,不要以为下面的操作跟问题有关,下面是具体的生成头部信息方法 输入下边加粗的缩写,然后Tab,就可以了: 生成html4.01 Transitional用 ht ...

  10. jQuery为动态生成的select元素添加事件的方法

    项目中需要在点击按钮时动态生成select元素,为防止每次点击按钮时从服务器端获取数据(因为数据都是相同的),可以这样写代码 1.首先定义全局js变量 var strVoucherGroupSelec ...

随机推荐

  1. supersocket实际应用之你画我猜游戏(一)

    supersocket这款组件,让不懂tcp/ip的人都能开发出网络应用.我们不必在开发与自己主要应用不相关的代码了,主要精力都能放在设计业务逻辑上面了. 现在使用现成又完备的组件,真是大大的提高了开 ...

  2. sqlserver给某个用户授权某张表得操作权限,并利用这个用户进行跨库查询

    Sql表授权 创建用户 此时,改用户登录是看不到任何表的 设置权限         创建连接   EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB','要 ...

  3. 将编译过的C++库迅速部署在Visual Studio新项目中

      本文介绍在Visual Studio中,通过属性表,使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C++第三方库的方法.   例如,我们现有一个解决方案,其中的一个项目 ...

  4. 面试题:两个UILabel横向排列,要求压缩其中一个Label,另外一个Label的内容保持完整

    一.题目 AutoLayout中,布局两个UILabel,竖直方向处于统一水平线上:水平方向,二者间隔一定距离,左边的label距离父容器一定间距,右边的label距离容器右侧一定间隔 要求,两个la ...

  5. c# HttpWebRequest 解决 请求HTTPS慢

    其实就几行代码 if (strUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { request.Cred ...

  6. Linux扩展篇-shell编程(三)-shell运算符

    基本语法: 格式一 expr +. -. \*./. %(加.减.乘.除.求余) 格式二 "$((运算式))"或者"$[运算式]" 基本运算符 Shell 和其 ...

  7. (三)xpath爬取4K高清美女壁纸

    功能:通过xpath爬取彼岸图网的高清美女壁纸 url = 'http://pic.netbian.com/4kmeinv/' 1. 通过url请求整张页面的数据 2.通过页面的标签定位图片所在的位置 ...

  8. 如何将 iPhone 的照片同步到 windows 电脑上

    首先在电脑上,新建一个文件夹,并把共享权限打开. 文件夹 右键 属性,共享,添加 Everyone. 然后,让手机和电脑连接到同一个局域网,手机热点即可. 在手机端看 文件 app,找到电脑的共享文件 ...

  9. 短链接口设计&禁用Springboot执行器端点/env的安全性

    短链接口设计 //短链接服务 跳转方式,实现短链接转长链接的请求. @GetMapping("/{code}") public String redirectUrl(@PathVa ...

  10. cdh版本 livy部署

    1.livy部署主要就是依赖spark_home的环境变量 如何找到spark_home在哪 locate spark-shell locate是个linux找文件的命令,直接找到该目录