HTML中的字符串转义

为什么要转义?

转义可以防止 xss 攻击。接下来,我们来看一下如何转义。

HTML Sanitizer API

Sanitizer 是浏览器自带的转义方法,在2021年初被提出,兼容性问题很大。

HTML中的字符串转义_第1张图片

列举几个常用的 API: 

const $div = document.querySelector('div');
const user_input = `Hello There`;
const sanitizer = new Sanitizer() 

$div.setHTML(user_input, sanitizer); // 
Hello There
const user_input = `Hello There`
const sanitizer = new Sanitizer()

sanitizer.sanitizeFor("div", user_input) // HTMLDivElement 
sanitizer.sanitizeFor("div", user_input).innerHTML // Hello There

自定义方法进行转义

这是一个简单的转义,只会把跟 html 有冲突的标签进行转义。

const escapeMap = {
  //'&': '&',
  '<': '<',
  '>': '>',
  '"': '"',
  "'": '''
};
 
function escape(string = '') {
  const reg = new RegExp(`[${Object.keys(escapeMap).join('')}]`, 'g');
  return string.replace(reg, item => escapeMap[item]);
}

防止用户输入恶意篡改,Vue,JSX 默认情况下不用处理,插入的文本都是按照字符串处理。Vue中用 v-html 引入的内容要做转义。

第三方库转义

DOMPurify

转义库里面 GitHub star 最多,11.5k。

const user_input = 'Hello There';
const cleanedHtml = DOMPurify.sanitize(user_input); // Hello There

还可以根据需要定义自己的白名单(允许的标签)和属性,比如字符串中包含自定义标签和属性时就需要用到。

js-xss

sanitize-html

你可能感兴趣的:(HTML5,html,转义)