在PHP网站中,怎样防止别有用心的人注册跟其他用户不易分辨的用户名?

比如0和O,1和I或者l,5和S,Z和2等,

另外包括但不限于使用希腊字母,西里尔字母,俄文字母或者其他拉丁系语言的字母来高仿英文字母的,以及使用中日汉字里面看起来差异非常小的汉字(也可以使用差别不大的简繁体中文汉字在)作为高仿用户名。

怎样才能尽量避免这种情况发生?

回答

我这里有一个 ·真· 防伪造用户名方案。

那就是用GD绘图画出两个用户名,然后用图片相似度算法算出匹配度。就知道是不是仿冒他人了。

我感冒了 vs 娃娃脾气

娃娃脾气 vs 哇哇脾气

shellus vs she11us

然后取出黑色部分的像素数量,即可得到两个文本的相似度了

/**

* Created by PhpStorm.

* User: shellus

* Date: 2017-02-12

* Time: 19:34

*/

require 'vendor/autoload.php';

use Intervention\Image\ImageManager;

// create an image manager instance with favored driver

$manager = new ImageManager(array('driver' => 'gd')); // imagick

// to finally create image instances

$img = $manager->canvas(800, 100, '#fff');

$img->text('蛙蛙脾气', 0, 0, function(\Intervention\Image\AbstractFont $font) {

$font->file('src/fonts/msyhbd.ttc');

$font->size(100);

$font->color('#000');

$font->valign('top');

});

$img->text('娃娃脾气', 0, 0, function(\Intervention\Image\AbstractFont $font) {

$font->file('src/fonts/msyhbd.ttc');

$font->size(100);

$font->color('#ff0');

$font->valign('top');

});

$img->save('bar.png');

这玩意儿,程序自动处理并不能完全解决问题,可以先用程序处理一遍,无法确定的就放入待定区进行人工审核。说一下我的思路:

如果用户名包含别人的用户名,比如原有abc,再注册一个abc123,这个就要毙掉了;

检测字符的编辑距离,php里面有个函数levenshtein可以看看;

其他特定相似字符的判断,建一个黑名单。

首先应当创建相似字符的对应表,即0与o的一个全量集合,这一块需要人工处理(可以使用更加高科技的手段,如果你会的话),然后创建用户名时首先允许他创建,然后定时任务的分析包含这些相似字符的用户进行匹配,然后封锁帐号,并要求其联系管理员解封

最初方案:

把用户名作正规化处理,例如0和o等价,就把Hell0正规化成Hello,规则多复杂都可以(大小写,vv转w之类)。

把正规化后的名字保存起来以便下次注册的时候判断(放数据库,Redis,实现个bloom filter都可以)

和 @娃娃脾气 思路相似的是感知哈希,用DCT hash效果还可以,但还是要解决搜索问题。

把这两个思路结合起来:

遍历字符集合,用图像相似性构造出字符的等价类(解决了规则构造的问题)

用户注册时根据等价类把用户名正规化,保存到bloom filter供下次注册判断(解决搜索问题)

这样避免感觉规则有点大,给id,昵称可以随意变

屏蔽这些字 不给注册

好吧,说一下本屌的思路,毕竟心有多大,需求就有多大

您需要建立一张表来存取可能匹配到的字段名,然后写一个字符匹配对照类,比如我Tom注册的时候,然后我发现这个o可能被人利用啊,顺带把T0m这个昵称放到新建的那个表上,同时绑定到新用户的id上,当然我这个从表一般只是用户注册或者更改昵称的时候查一下,有的话就提示这人注册了啊,别整成这样了?

你做的应该是论坛社区之类的吧 如果想防止用户仿冒ID的情况发生不只是单单从用户ID上来区分 应该从用户头像 用户等级上也做出区分 一个完善的社区应该也包括这些 看看贴吧的也是允许高仿ID的 况且社区论坛都是弱关系社交 即使有高仿ID也不会出现什么情况 而且贴吧这么多用户量都不考虑这个高仿ID 一些小的论坛用户量更小 完全没必要考虑这个

说一个防止使用其他拉丁语系字母高仿英文字母的好方法,那就是:

用正则表达式!

但对于使用相似度很高的字母高仿数字(或相反),以及使用中日汉字(如果正则允许的话)之间微小差异的特点来注册的高仿ID无效。

这不是我的名字吗?有人仿冒我?

php h5用户信息,【php】PHP怎样防止用户注册高仿其他人的用户名?相关推荐

  1. 用html制作用户信息注册,[网页设计]html用户注册界面

    [网页设计]html用户注册界面 0 2016-08-06 10:00:05 先上一张简约的界面的效果图 这里是style里面的内容 再来body里面的内容,这里用到的是失焦 onblur  和聚焦 ...

  2. SpringBoot+JWT实现登陆token验证并存储用户信息

    基于Token的JWT认证 JWT:Json web token 是为了在网络应用环境间传递声明而执行的一种基于JSON传输格式的开放标准,可实现无状态.分布式的Web应用授权. 缺点:用户主动注销, ...

  3. mvc三层架构(用户信息管理系统)

    mvc三层架构(实战项目 用户信息管理系统) 一.三层架构 View 层:用于接收用户提交请求的代码. Service 层:系统的业务逻辑主要在这里完成. Dao 层:直接操作数据库的代码. 二.三层 ...

  4. 高仿腾讯 QQ,已经实现了纯文本,表情,图片,语音,位置等信息的发送。

    QQ 项目地址:HuTianQi/QQ 简介:高仿腾讯 QQ,已经实现了纯文本,表情,图片,语音,位置等信息的发送. 一款高仿腾讯 QQ 的 IM 软件,基于 bmob SDK,已经实现聊天,表情,图 ...

  5. H5网页使用支付宝授权登录获取用户信息详解

    用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...

  6. php 支付宝用户信息授权,h5端支付宝第三方用户信息接口demo

    1 准备:去阿里开放平台注册申请成为开发者,然后添加一个web或者移动端应用并选择免费会员信息接口 具体流程参考支付宝开放平台开发文档即可. 2 在index.php中配置好申请的$APPID和$EN ...

  7. vue h5微信公众号授权获取用户信息

    vue h5微信公众号授权获取用户信息 1.申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.修改网页授权 ...

  8. 微信小程序微信公众号支付宝小程序H5(获取信息用户信息,支付,分享,人脸识别)

    文章目录 一.微信小程序 1. 获取信息用户信息 2.支付 3.分享 4. 腾讯云小程序人脸核身 二.微信公众号 1.获取信息用户信息 2.支付 3. 分享(普通分享) 4.分享(vue单页面 配置分 ...

  9. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

最新文章

  1. [2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改
  2. js中的异步[Important]
  3. cacti设置redis监控端口
  4. H3CSE园区-STP
  5. WINHTTP的API接口说明
  6. swagger的详细注解
  7. C语言求三角形斜边长
  8. 学习专栏-关于Python读取数据学习记录
  9. 针对正方教务开发大学App(查成绩,课表,一键评教,图书馆,正方系统)
  10. Windows和Linux的环境变量
  11. idea,maven飘红及无法打包问题
  12. U盘文件变成快捷方式的解决方案
  13. 土微数字隔离器和接口类芯片可完美替代进口品牌TI和ADI
  14. js的window.print打印页面 不打印网页中的“打印”按钮
  15. 游戏行业的发展前景有什么看法
  16. Redis连接池技术笔记小结 RedisPool
  17. html实现简单分享功能
  18. python itchat库_用python【itchat】库获取群聊信息的正确姿势
  19. FFmpeg简单使用:过滤器 ---- h264_mp4toannexb
  20. LaTeX 自定义图题:改变图片标题文字

热门文章

  1. Oracle存储过程procedure与函数function区别
  2. 杭电oj1087最长递增子序列java实现
  3. 设计模式之动态代理的代码实现(Java)
  4. 在Windows上使用putty连接一台Linux主机
  5. 诺曼门的十个产品_用户决策与产品设计
  6. 判断frame是否已创建_大白菜的ROS笔记(8)(创建TF广播和监听,内容很多,细节满满)...
  7. 如何在后台运行 Linux 命令
  8. CCNA重点难点:生成树配置
  9. php 多个单选怎么办,【大神看过来】根据一个用PHP做的单选投票,改成多选,且可显示...
  10. java代码怎样连接es,Elasticsearch 连接ES的两种方式