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

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

什么是恶意输入

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

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

<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标准入门


相关文章
|
5月前
|
JavaScript 前端开发
最万能的登录、注册页。带输入数据的验证。邮箱的正则表达式、正则表达式验证输入的数据
这篇文章提供了一个带有输入数据验证功能的万能登录和注册页面的HTML和JavaScript代码示例,包括正则表达式验证邮箱和用户输入数据。
|
7月前
|
存储 安全 PHP
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
|
7月前
去除程序名称 去除程序属性详细信息中的程序名称 创建时间等信息
去除程序名称 去除程序属性详细信息中的程序名称 创建时间等信息
57 0
|
8月前
视觉智能平台模板视频人脸融合,上传模板之后立即删除模板会报模板id无效,是因为模板还未生成吗?
视觉智能平台模板视频人脸融合,上传模板之后立即删除模板会报模板id无效,是因为模板还未生成吗?
59 1
替换文件中的敏感信息
假设我们有一份文件,文件中包含了很多个人信息。现在需要一份去除其中敏感信息的版本,将文件中所有手机号的4~7位和身份证号的6~15位用 * 替换。
|
存储 缓存 小程序
小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案
小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案
325 0
|
小程序 UED
小程序审核规则大致内容
小程序审核规则大致内容
小程序审核规则大致内容
|
JSON 测试技术 数据格式
[单账户]标签规范工具(标签策略)使用手册
企业随着上云的深入,对于资源管理的诉求越来越强烈。资源被企业各个子公司、部门等使用的时候,存在资源自产自用,一产复用,共产共用的情况。企业发展最初阶段,满足快速发展的诉求,资源自己生产自己使用。当企业发展到一定阶段,存在资源生产多处复用的情况,以满足业务细分发展。再到资源管理统一生产规划、根据场景复用资源的情况。标签化管理资源共产共用的基础,根据用途、场景、归属进行资源分类。如何把资源标签使用规范就是资源分类的前提。
1082 0
6个绝赞的模板网站,你想要的、这里都有!
提起PPT,应该都不陌生,作为Office三件套之一,它扮演者至关重要的角色。在学生时代如此,在工作之后更为重要。 以我为例,在学生时代没有意识到PPT的重要性,无论是日常开会讨论,还是毕业答辩,我都是随便找出一个简陋的默认版本,贴上一些文字、公式、图片就大功告成。做完一个PPT,前后也用不到半天时间。
6个绝赞的模板网站,你想要的、这里都有!
|
Web App开发 缓存 网络协议
网页页面下各种标签的含义
1、charset: 2、X-UA-Compatible: 3、canonical : 4、dns-prefetch: 5、keywords 6、viewport 7、description
171 0

相关实验场景

更多