足球外围app-靠谱的外围足球app

行业新闻
Group news
足球外围app(靠谱的外围足球app)    您的位置: 足球外围app  >  行业新闻  >  正文

关于 Unicode 所有开发者都应该知道的前五件事 并用来防止欺诈

2019年11月08日 文章来源:网络整理 热度:163℃ 作者:刘英

2017年11月 BBC 报道了一个假冒 WhatsApp 的新闻。假应用似乎与官方应用属于同一个开发者名下。原来这些骗子通过在开发者名字中加入 Unicode 的非打印空格(nonprintable space),绕开验证。在 Google Play 维护人员发现之前,下载假应用超过 100 万人。

关于 Unicode 所有开发者都应该知道的前五件事 并用来防止欺诈

Unicode 是极其有价值的标准,使得电脑、智能手机和手表,在全球范围内以同样的方式显示同样的消息。不幸的是,它的复杂性使其成为了骗子和恶作剧者的金矿。如果像 Google 这样的巨头都不能抵御 Unicode 造成的基本问题,那对小一点的公司来说,这可能就像是必输的战役了。然而,大多数这些问题都是围绕着几个漏洞利用的。以下是关于 Unicode 所有开发者都应该知道的前五件事,并用来防止欺诈。

1. 很多 Unicode 代码点是不可见的

Unicode 中有一些零宽度代码点,例如零宽度连接器(U+200D)和零宽度非连接器(U+200C),它们都暗示了连字符工具。零宽度代码点对屏幕显示没有可见的影响,但是它们仍会影响字符串比较。这也是假 WhatApp 应用的骗子能这么长时间不被发现的原因。这些字符大多数都在一般标点符号区(从? U+2000 到 U+206F)。一般来说,没有理由允许任何人在标识符中使用这个区的代码点,所以它们是最不易过滤的。但是该区域外也有部分其他不可见的特别代码,比如蒙古文元音分隔符(U+180E)。

一般来说,用 Unicode 对唯一性约束做简单的字符串比较,这很危险的。有一个可能的解决方法,限制允许用作标识符及其他任何能被骗子滥用的数据的字符集。不幸的是,这并非该问题的彻底解决方法。

2. 很多代码点看起来很相似

Unicode 努力覆盖全世界书写语言中的所有符号,必然有很多看起来相似的字符。人类甚至无法把它们区分开来,但是电脑能毫不费力地识别出差别。对这个问题的一种令人惊讶的滥用是拟态(Mimic)。拟态是一项有趣的应用,将软件开发所使用的常见符号,例如冒号和分号,替换成相似的 Unicode 字符。这能在代码编译工具中制造混乱,留下一脸懵逼的开发者。

关于 Unicode 所有开发者都应该知道的前五件事 并用来防止欺诈

相似符号带来的问题,远不止是简单的恶作剧。花哨的叫法是 homomorphic attacks(同态攻击)。利用这些漏洞,会导致严重的安全问题。在 2017 年 4 月,一位安全研究员通过混合不同字符集中的字母,成功地注册了一个看起来与 apple.com 非常相似的域名,甚至为它拿到了 SSL 证书。各大浏览器都愉快地显示了 SSL 挂锁,将该域名列为安全域名。

与混合可见字符和不可见字符相似,没有道理允许标识符,尤其是域名,使用混合字符集名。大多数浏览器已经采取了行动,将混合字符集域名显示为十六进制的 unicode 值以对其进行处罚,这样用户就不会轻易地被迷惑。如果你向用户显示标识符,比如说在搜索结果中,考虑类似的方法来避免混淆。但是,这也不是完美的解决方法。某些域名可以轻易地用一个非拉丁字符集中的单单一个区来构建,比如 ap.com 或者 chase.com。

Unicode 协会出版了一张易混淆字符表,可能作为自动检查潜在诈骗的好参考。另一方面,如果你想找一个快速创造疑惑的方法,看看?Shapecatcher?吧。它是一个奇妙工具,列举了视觉上像图画的 Unicode 符号。

3. 规范化并不那么规范

规范化对像用户名这样的标识符来说非常重要,帮助人们用不同的方法输入值,但是用一致的方法来处理。规范标识符的一个常见方法是把所有字符都转变成小写,确保 JamesBond 和 jamesbond 是一样的。

因为有如此多的相似字符和交叉集,不同的语言或者 unicode 处理库,可能应用不同的规范化策略。如果在若干地方进行了规范化,会潜在地带来安全风险。简单来说,不要假设小写转换在应用软件中的不同部分是一样的。来自 Spotify 的 Mikael Goldmann 在他们的一名用户发现了一个盗用账户的方法后,于 2013 年针对这个问题写了一份事件分析。攻击者可以注册其他人用户名的变体,比如 BIGBIRD,会转换成标准的账户名 bigbird。该应用软件的不同层对单词的规范化不同,使得人们能够注册模仿账号,而重置目标账户的密码。

4. 屏幕显示长度和内存大小无关

使用基础拉丁字符集和大多数欧洲字符集时,一段文本在屏幕或者纸上所占的空间大致与符号数成比例,大致与文本的内存大小成比例。这也是 EM 和 EN 成为流行长度单位的原因。但使用 Unicode 时,像这样任何种类的假设都会变得危险。有像 Bismallah Ar-Rahman Ar-Raheem (U+FDFD)这样可爱的字符,单单一个字符就比大多数英文单词都要长,能够轻易地超过网页上假定的视觉外框。这意味着基于字符串字符长度的任何种类的自动换行,或者文本中断算法都能轻易被愚弄。大多数终端程序要求固定宽度的字体,所以在这些程序中显示的话,你会看到右引号完全标在了错误的位置上。

上一篇:从3个方面来了解物联网安全的指标参数


下一篇:怎么读取单片机程序_单片机程序是如何执行的_如何读懂单片机程序

友情链接
Links
XML 地图 | Sitemap 地图