php h5用户信息,【php】PHP怎样防止用户注册高仿其他人的用户名?
在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怎样防止用户注册高仿其他人的用户名?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 某一天时间凌晨,PHP获得今天
- 下一篇: php 使用 curl 报错,PHP C