useHeadSafe:安全生成HTML头部元素

news/2024/11/13 10:13:24/文章来源:https://www.cnblogs.com/Amd794/p/18308136

title: useHeadSafe:安全生成HTML头部元素
date: 2024/7/17
updated: 2024/7/17
author: cmdragon

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

categories:

  • 前端开发

tags:

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

image
image

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

在构建网站时,我们常常需要在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

往期文章归档:

  • Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验 | cmdragon's Blog
  • 探索Nuxt.js的useFetch:高效数据获取与处理指南 | cmdragon's Blog
  • Nuxt.js 错误侦探:useError 组合函数 | cmdragon's Blog
  • useCookie函数:管理SSR环境下的Cookie | cmdragon's Blog
  • 轻松掌握useAsyncData获取异步数据 | cmdragon's Blog
  • 使用 useAppConfig :轻松管理应用配置 | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(五) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(四) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(三) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(二) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(一) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(十一) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(十) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(九) | cmdragon's Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745391.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Goby漏洞发布 | CVE-2024-4879 ServiceNowUI /login.do Jelly模板注入漏洞【已复现】

漏洞名称:ServiceNowUI /login.do Jelly模板注入漏洞(CVE-2024-4879) English Name:ServiceNowUI /login.do Input Validation Vulnerability(CVE-2024-4879) CVSS core: 9.3 漏洞描述: ServiceNow 是一个业务转型平台。通过平台上的各个模块,ServiceNow 可用于从人力资…

EMQX配置用户名和密码开启emqx_auth_mnesia认证方式连接

1、 找到MQtt 的 /etc/plugins/ 文件夹下的emqx_auth_mnesia.conf 文件 vim打开编辑该文件,根据例子添加账号密码 并保存 添加内容: auth.user.1.username = admin auth.user.1.password = 123456 2、配置禁止匿名登录(安全认证) 找到emqx.conf编辑## Allow anonymous authe…

NETCORE -MinIO的基本使用

NETCORE -MinIO的基本使用环境:.net6 + minio minio服务部署:https://www.cnblogs.com/1285026182YUAN/p/18308075一. 创建 net6项目 二. 安装minio nuget包 三.在appsetting.json 配置文件中设置MinIO配置 {"Logging": {"LogLevel": {"Default&q…

gwang.top:一键官网查询

gwang.top是由小章做的一款在线工具,专注于帮助用户快速查找软件、机构或公司的官方网站,本文介绍这款工具的使用。原文地址:https://itxiaozhang.com/one-click-official-site-query/ 本文配合视频食用效果最佳,视频教程在文章末尾。简介 gwang.top 是一个小章做的在线查询…

(新)app逆向二(adb操作)

一、逆向的基本流程 # 1.获取app的目标(官网,豌豆荚,下载历史老版本);尽量不要去华为,小米应用市场下载;——》拿到app放在电脑上,并且安装到手机上 # 2.使用抓包工具,手机上操作app,进行抓包是(charles,fiddler); # 3.使用反编译工具(JADX,JD_GUI),把apk问阿金反…

Docker 部署 minio

Docker 部署 miniominio是分布式文件存储一. minio的yaml部署 http版的services:minio-http:command:- server /data --console-address :9001container_name: minio-httpenvironment:- MINIO_ACCESS_KEY=username- MINIO_SECRET_KEY=qI7-****O6image: minio/minio:latestloggi…

SciTech-EECS-电设计- PCB设计-电路设计与仿真系统 + SPICE 仿真描述与模型

电路设计与仿真系统用户可以通过 "仿真系统" 轻松的观察“电路行为”的“即时状态”。 是因为“电子电路设计与仿真系统”集成了原理图编辑器,仿真引擎,波形显示等功能,"仿真系统" 通常也会涵盖“扩展模型”以及电子“元器件库”:"扩展模型"主…

调试——条件断点

最近在用Unity做一款消除类的游戏,在选择两个相同的麻将时,会进行匹配消除,在选择第二个麻将的时候,代码逻辑是遍历麻将种类,然后进行对比匹配,一样则消除,但是第二个麻将被选择之后,触发的逻辑可能出现了问题,之前Debug的时候就一筹莫展了,因为两次点击,都会从touc…

Loki的部署模式

Loki部署模式 Loki程序基于微服务架构,由多个组件构成,不同部署模式下用户的组件亦有所不同“all”表示单体模式 “individual”表示微服务模式 “simple scalable deployment”模式下则存在三个逻辑组“read”、“write”和“backend” 系统架构写路径Distributor负责接收并…

利用FastAPI和OpenAI-Whisper打造高效的语音转录服务

最近好久没有写博客了,浅浅记录下如何将OpenAI-Whisper做成Web服务吧🤣 介绍 在这篇指导性博客中,我们将探讨如何在Python中结合使用FastAPI和OpenAI-Whisper。OpenAI-Whisper是一个前沿的语音识别模型,而FastAPI是一个高性能的现代Web框架,专门用于构建API。这两种技术的…

各种图(流程图,思维导图,UML,拓扑图,ER图)简介

原文链接:https://blog.51cto.com/jiqing9006/3284733 流程图 1.定义:流程图是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。 2.案例3.计算机语言只是一种工具。光学习语言的规则还不够,最重要的是学会针对各种类型的问题,拟定出有效…

使用C#/.NET解析Wiki百科数据实现获取历史上的今天

创建一个webapi项目做测试使用。 创建新控制器,搭建一个基础框架,包括获取当天日期、wiki的请求地址等创建一个Http请求帮助类以及方法,用于获取指定URL的信息 使用http请求访问指定url,先运行一下,看看返回的内容。内容如图右边所示,实际上是一个Json数据。我们主要解…