php 如何对客户端 pc 生成唯一标识?

2014-09-17 09:48:00 +08:00
 kisshere
想对论坛发广告帖的用户浏览器做永久屏蔽,但目前用于标识客户端浏览器,用cookie,但是很容易被清理掉,php又没法获取mac地址,用evercookie貌似也应该能被清除,有没有更好的办法获取客户端浏览器唯一标识?
12914 次点击
所在节点    程序员
71 条回复
surftheair
2014-09-17 13:04:46 +08:00
fingerprint https://panopticlick.eff.org/ 通过检测浏览器插件,字体,分辨率,显示器位深,时区等,几乎每台电脑(浏览器)都能生成唯一的fingerprint。一般论坛的小白被封了完全不知道怎么回事,再怎么删cookies换ip都没用。github上有个现成的库,我找不到了
surftheair
2014-09-17 13:08:56 +08:00
@surftheair 给你一个我的测试地址http://jude.me/fingerprint/
raincious
2014-09-17 13:21:52 +08:00
楼上诸位真是太天真……

实在看不下去了,先给 @shiny 点分,因为这回答才是正确的。

各种浏览器“特征”检测实在太搞了。你们肯定没wget试一下,或者用curl写个程序提交个?其实换个IP也是分分钟的事,网上的代理服务器这么多,Tor也行。

各位真的认为SPAMMER们会老老实实打开浏览器复制粘贴么?……

另外 @oott123 的思路也挺靠谱,但是仍然太容易破,因为总是有数据要提交的,伪造一个不就完了。
oott123
2014-09-17 13:23:58 +08:00
@raincious 不是伪造不伪造的问题,是提高伪造的成本。

> 对于 Spammer 来说,效率是摆在第一位的。他们需要用极短的时间来发送大量的 SPAM ,这就是 Spammer和普通的用户最显著的区别。

利用这一点,我们可以使每位评论者都花上一点点的时间来计算一个特殊的 hash值,比如hash(time+i),然后循环使i自增,最后要求计算出来的 hash 满足一个特殊的条件如前3位相同,这样对于一个Spammer 来说,他发送一个 SPAM 所使用的资源提高了:需要更多的 CPU 和时间。而对于普通用户来说,浏览器计算这个 hash值的时间在 3 秒内,还不够用户输入一条完整的评论,对于用户来说几乎无影响。

这一段
oott123
2014-09-17 13:26:45 +08:00
考虑你是一个 Spammer :你手上有大量的论坛需要你发 spam。
其中大多数是直接可以发的。
有的,可能有一些很容易破解的措施:比如验证码。
还有的,非但反垃圾算法复杂,发一帖还得卡三秒…
假如这个论坛不是你的重点对象,肯定放弃算了…
em70
2014-09-17 13:27:05 +08:00
去广告要用机制解决,技术不行,参考v2ex你看怎么就没人发广告呢
muzuiget
2014-09-17 13:29:29 +08:00
同意 @shiny 和 @raincious

无非就是几点

1. 不要信任任何来自客户端的数据
2. 提交发评论门槛
3. 找出垃圾内容的相似模式,针对屏蔽。

现在发垃圾广告谁还用浏览器,随便用 Java 写个请求性能蹭蹭就上去了。
raincious
2014-09-17 13:32:25 +08:00
@oott123

嗯 ………………………………………………………………………………

^ 是的,我故意写了这么长的……,你应该注意到了嗯……,以上。

但是你能比较一下你这个限制方式和在Session信息里加个保护周期有什么区别么?

比如,限制当前Session的用户在3秒内只能提交一次?
yylzcom
2014-09-17 13:35:32 +08:00
调用akismet来清理
目前我的论坛是设立一个板块,需要手输密码,输入密码才能访问这个板块发帖激活(就是一个积分增长的过程)
这种办法对99.9%的发帖机有用,半个月有一两个手工注册的,这样的话就不足为虑了
herold519
2014-09-17 14:03:53 +08:00
修改评论机制;
评论开启审核;
或者弄段程序系统检测短时间内出现N多相似内容的文本直接冻结审核
oott123
2014-09-17 14:09:39 +08:00
@raincious session 里加的,我可以请求一个 session ,然后去别的论坛发帖,过1分钟再回来。
算哈希,(这里简化一下,不考虑异步)你的 CPU 只有这么多,资源被我占用了,你这3秒就只能算我的哈希。
shiny
2014-09-17 14:19:48 +08:00
@oott123 我身边的例子,是任劳任怨的大学生领着 2k 的月薪,手工发帖… 而且帖子不需要多,但是要有排名。
oott123
2014-09-17 14:21:05 +08:00
@shiny 手工发帖上面的都给出了各种奇葩办法,我解决的是机器发帖问题。
mornlight
2014-09-17 14:21:16 +08:00
http请求你一般拿不到mac地址
mornlight
2014-09-17 14:32:33 +08:00
@surftheair 感觉这个比较靠谱,机器发帖的话js不执行,不会生成这玩意。
kisshere
2014-09-17 15:00:21 +08:00
@shiny 我的意思是,生成电脑的唯一id,即使他清除cookie也好,curl post时切换ip也好,这个id是不能变的,这样即使雇佣勤勤恳恳的大学生,也没办法,因为我已经ban掉你这台电脑了,你没权限发spam了,即使你人工输入captcha都不行
kmvan
2014-09-17 15:11:46 +08:00
访客说不定全部信息都是假的。只能是验证码
kisshere
2014-09-17 15:14:18 +08:00
@mornlight casperJs?
raincious
2014-09-17 15:30:13 +08:00
@kisshere 我能告诉你不可能实现么?因为这个比较准确嗯……

哪怕是HTTP请求有一个“老大哥ID”字段,70亿人每人一个,但由于数据储存在计算机中(比如某个芯片里),且由于这是数据,那么这意味着都是可以变更的。

参考IMEI。

因此你只能通过周遭信息进行判定,这是一个系统工程,而不是一个函数就能搞定的。

@oott123

你这更加不靠谱了。

1、我觉得这个方法走火入魔了。你的思路是“把这个人搞卡,让他卡到不能发帖”,这是不正确的。
2、Hash运算或许可以被CPU多核加速,于是你无法稳定的提供3秒的计时。
3、如果你设计一个不能被CPU多核加速的Hash算法,比如Blowfish之类的,那么这个算法必然仅仅限制在使用一个核心。别人用另一个核心去发就好了。
4、3秒的Delay很短,但10秒+的Delay很常见吧?V2EX好像是120秒?你卡用户120秒用户肯定会不爽。
lygmqkl
2014-09-17 15:37:19 +08:00
给你个思路:自动封ip,在文章中监测关键词,发现一次封ip30分钟,慢慢得测试代码,当出错率很低得时候,可以把时间提高到30hours,可以自动形成一个列表用于监测,足够了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX