使用标签模板来解决用户恶意输入问题

简介: 在一些应用场景下,用户输入的内容会显示到页面中,比如文章的发布,等等,这个时候就会出现一个问题。

什么是恶意输入

在一些应用场景下,用户输入的内容会显示到页面中,比如文章的发布,等等,这个时候就会出现一个问题。

比如猪痞恶霸在掘金的文章简介内插入下面的一行代码

<script>
    alert("猪痞恶霸yyds")
</script>
复制代码

这里就不表达出不好的内容了,其实这还不算是严重的问题,如果使用了无限循环alert那就直接死机,又或者将页面跳转到其他页面去,造成进不去的情况

😶‍🌫️用户恶意输入的威胁性可想而知,那么又如何去解决这个问题呢,下面将具体介绍一种通过标签模板来解决的方法

标签模板

概念

标签模板是模板字符串的一种使用方式,可以理解为跟在函数名后的模板字符串,也算是函数的另一种使用形式,可以将模板字符串内部的字符串部分和变量替换部分以参数的形式传递到函数中,就如下面的例子。

let str = "猪痞恶霸",
  _str = "fzf404";
function add(a, ...b) {
  console.log(a);
  console.log(b);
}
add`Hello${str}World${_str}`;
// [ 'Hello', 'World', '' ]
// [ '猪痞恶霸', 'fzf404' ]
复制代码

其参数的转换是有特定的规则,其第一个参数是一个数组的形式,其数组成员为变量部分的两边字符串,如上[ 'Hello', 'World', '' ]其数组包含三个成员,为什么会有空字符串,是因为在第二个变量部分_str"World"与空格之间,所以第三个数组成员为空字符串;第二个参数到第n个参数为变量成员,也可以使用扩展运算符使其为数组,如上[ '猪痞恶霸', 'fzf404' ]

使用

了解了标签模板的使用,那么我们是如何使用标签模板来解决用户恶意输入的问题呢

首先我们声明了一个str变量来模拟用户输入

let str = "<script>alert("猪痞恶霸yyds")</script>"
复制代码

声明一个防御函数,防御函数参考 《ES6标准入门》 ,这里我来讲解下我思考的其函数实现过程:

函数的参数包含两种,一种是字符串成员,一种是变量成员也就是用户输入的内容,首先保存第一个字符串成员,通过使用arguments从第二个参数开始遍历,因为需要在遍历体内进行监测恶意内容替换,所以从变量成员开始遍历,将变量成员通过String()转换为字符串,通过replace方法进行恶意内容的替换再与先前保留的头部字符串成员拼接,比如这里将<>替换为不可被认为成<script>执行但是可以被正常渲染的内容,在结束循环前拼接下一个字符串成员,达到交叉拼接的效果。

function SaferHTML(tempalte) {
  let s = tempalte[0];
  for (let i = 1; i < arguments.length; i++) {
    let arg = String(arguments[i]);
    // Escape special characters in the substitution.
    s += arg.replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;");
    // Don't escape special characters in the template.
    s += tempalte[i];
  }
  return s;
}
复制代码

最后再通过标签模板执行函数即可

let end = SaferHTML`<p>${str}用户输入${str}</p>`;
复制代码

总体上的实现是依托标签模板的参数特性,达到一个字符串的拼接替换操作。

参考文献

ES6标准入门


相关文章
|
6天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1359 7
|
3天前
|
存储 弹性计算 应用服务中间件
2026年阿里云服务器新手租用全流程完整步骤教程(最新版)
2026年阿里云服务器新手租用全流程完整步骤教程,阿里云服务器提供自定义租用、一键租用、云市场租用和活动租用四种核心方式,适配不同配置需求、技术能力和预算场景。无论是需要精准配置的专业用户,还是追求快速部署的新手,都能找到合适的租用方案。以下是详细的适用场景和操作流程,助力高效上云。
288 148
|
7天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
3天前
|
人工智能 弹性计算 运维
2026年阿里云建站费用解读:三种方案价格明细、功能特性及选型建议
阿里云建站费用多少?2026年阿里云建站费用解读:三种方案价格明细、功能特性及选型建议。在数字化需求日益增长的当下,搭建网站成为个人展示、企业推广的重要途径。阿里云作为主流云服务提供商,针对不同技术基础与业务规模,推出 “自购服务器建站”“万小智 AI 模板建站”“云企业官网定制建站” 三种核心方案,价格从 38 元 / 年到数万元 / 年不等,覆盖从个人到中大型企业的全场景需求。本文基于今年最新官方定价与实测数据,从方案细节、价格体系、功能对比、场景适配等维度展开解析,为用户提供客观选型参考。
258 154
|
6天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
832 4
|
13天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
846 14
|
1天前
|
机器学习/深度学习 人工智能 算法
炎鹊「Nexus Agent V1.0」:垂直领域AI应用的原生能力引擎
炎鹊AI「Nexus Agent V1.0」是垂直行业专属AI原生引擎,融合大模型、AIGA决策大脑、行业知识图谱与专属模型,打造“感知-决策-执行”闭环。支持21个行业低代码构建工具型、员工型、决策型AI应用,实现技术到业务价值的高效转化,推动AI从实验走向规模化落地。(239字)
192 1