首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除Url中的所有unicode字符

如何清除Url中的所有unicode字符
EN

Stack Overflow用户
提问于 2021-07-14 20:56:46
回答 1查看 389关注 0票数 1

我们有一个基于聊天的应用程序,我们的客户代表与最终用户聊天。最近,我们的安全团队发现了我们的应用程序的一个问题,用户可以在聊天窗口中插入Url的同音版本。

示例:如果最终用户在聊天窗口中键入以下问题:如何更改http://www.abcоs.ca的电子邮件设置

在上面的例子中,站点是同音版本,在"оs.ca“中是非ascii字符,而原始url可以是http://www.abcos.ca (我刚刚编了这些url示例)。

因此,我尝试在我的javascript中使用以下代码:

代码语言:javascript
复制
var chatMessage = 'How to change my email settings at http://www.abcоs.ca'
chatMessage.normalize('NFD').replace(/[^\u0000-\u007f]/g, '');

上面的脚本运行良好,它去掉了非ascii字符,但是我们支持英语和法语聊天,

在法语中,如果chatMessage是“注释修饰符mes paramètres de messagerie sur http://www.abcоs.ca

然后在消毒版中将"è“替换为"e”。

想知道是否有一种方法可以从javascript的输入文本值中检测url中的非ascii字符,以便expect结果是:“注释修饰符mes paramètres de messagerie sur http://www.abc”,以使法语字符仍保留在文本中,但url中的非ascii字符被净化。

感谢专家的建议和指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 21:54:23

好的,

这里有一个支持列表,列出了您可以在这里使用的-> https://www.unicode.org/Public/security/10.0.0/confusables.txt

在@ https://www.npmjs.com/package/unicode-confusables中也有一个包含这些数据的NPM包

现在,使用这些数据,我们可以检查任何混淆的内容并替换为普通的数据,或者只是用一些糖来替换以表明它是可混淆的,这可能是最好的选择,因为它让用户知道发布消息的人可能是不值得信任的人。

还有一个CDN版本,我在下面的片段中使用过。

例如..。

代码语言:javascript
复制
const tests = [
 "оs.ca",
 "Comment modifier mes paramètres de messagerie sur http://www.abcоs.ca"
];


async function run() {
  const f = await fetch('https://cdn.jsdelivr.net/npm/unicode-confusables-data@10.0.0-20170721/confusables.json');
  const confusables = await f.json();
  
  function sanitize(a, show) {
    const chars = [...a];
    for (let l = 0; l < chars.length; l += 1) {
      const confused = confusables[chars[l]];
      if (confused !== undefined) {
         if (show) chars[l] = ''; 
         else chars[l] = confused;
      }      
    }
    return chars.join('');
  }
  
  console.log('show confusables');
  for (const test of tests) 
    console.log(sanitize(test, true));
    
  console.log('replace with none confusables');
  for (const test of tests) 
    console.log(sanitize(test, false));  

}



run();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68385003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档