前端零宽字符,不可见的特殊字符,安全问题很大

零宽字符是 Unicode 中一类不可见的特殊字符,不占据视觉空间,但会影响文本的排版、编码或行为。它们在前端开发中常用于特定场景,但也可能引发安全问题。

前端应用场景
1. 文本换行优化 
   使用 `ZWSP` 允许长单词在特定位置换行:
  


   <p>这是一个非常长的单词:Antidisestablishmentarianism</p>
   <!-- 插入零宽空格 -->
   <p>这是一个非常长的单词:Anti\u200Bdisestablishmentarianism</p>
   

2. 数据隐藏与水印 
   在用户不可见的文本中嵌入信息(如用户ID):


   const userId = "user123";
   const hiddenText = "可见内容" + userId.split('').map(c => `\u200B${c}`).join('');
   console.log(hiddenText); // 用户看到"可见内容",实际包含隐藏信息
   

3. Emoji 组合
   使用 `ZWJ` 连接多个 Emoji:
   


   const family = "👨\u200D👩\u200D👧\u200D👦";
   console.log(family); // 显示为 👨👩👧👦
   

4. 防爬虫与抄袭
   在网页内容中插入零宽字符,干扰爬虫解析:


   document.body.innerText = "原创内容" + "\u200B".repeat(10);
   

 安全问题与注意事项
1. 钓鱼攻击
   攻击者利用零宽字符伪造 URL:
   


   const fakeUrl = "https://example.com\u200B@evil.com";
   console.log(fakeUrl); // 显示为 "https://example.com@evil.com",实际指向恶意网站
   

2. 输入验证绕过
   用户可能在表单中输入含零宽字符的恶意数据:


   // 检测并移除零宽字符
   function sanitize(input) {
     return input.replace(/[\u200B-\u200F\uFEFF]/g, '');
   }
   

3. 调试困难
   零宽字符可能导致字符串长度异常,需用工具检测:


   "test\u200B".length; // 输出 5,但视觉上只有4个字符
   

检测与处理
正则表达式过滤:
 


  const hasZeroWidth = /[\u200B-\u200F\uFEFF]/g.test(text);
  


浏览器插件:  
  使用 [Zero-Width Character Detector](https://chrome.google.com/webstore/detail/zero-width-character-detec/ojppmkgpljfmhnfaeplldlajjhgehomb) 高亮显示页面中的零宽字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值