首页 > 求js字符串后端加密前端解密解决方案

求js字符串后端加密前端解密解决方案

我们公司做的网站有大量客户的电话号码(类似百姓网), 后端是nodejs
为了防止采集器和其他非法盗取这些信息, 我想把电话号码改成ajax获取, 并在网站后端加密电话号码然后传到前端, 前端自行解密后再显示
本人对加密算法没什么了解, 搜了一下好像有AES等比较著名的算法
请问是否有符合我的需求的算法? 安全性如何, 是否有足够高的破解成本? 使用时需要哪些细节?


建议你生成图片。


打码平台(人工打码)的报价我看了一下是3分钱1个。不高吧。
——补充:这里指的是打满11位电话号码,破解“用图像展示电话号码”的价格。如果是破一般的4位验证码,更加便宜(接近1分5),甚至部分简单的验证码都不用人工去打,打码平台用机器就能秒出。

浏览器人可以操作,电脑就可以自动化操作。只要展示出来,哪怕是图像,也必然不可避免的被破解。

虽然直接防守不行,但总有变通的办法。你总可以不展示出来,然后增加输入验证码(或其他工作量证明(Proof of Work)步骤)才显示电话号的一步操作。这样可以通过增加人工介入的步骤来制造障碍。只要工作量证明的方法足够花哨多变(例如:请选择以下四个文字哪个是猫叫“喵汪嗷啊”),破解就必须花大的人力投入实际的人工。

总之想彻底达到题主原来的目的,还是难。我想题主需要思考的是鉴权而不是反采集。对于网站而言,重要的是用户不明示公开的信息不泄露,而不是限制用户想公开的信息不被“采集”——从另一个角度来讲,如果只是大量独立的访客正当访问网站,宏观上看是不是也和网站被“采集”差不多呢?

另外也可以加入访问限制,做一个简单(但不彻底)的加强。例如同一cookie/同一ID每天限制查看XX个电话号码,同一邮箱注册一次,或注册必须用手机确认验证码。


……破解成本足够小,只要你有在客户端展示直接下发了文本,破解成本都很小的。
与其这样做,还不如把电话号码做成图片发下来。
虽然对于破解来说,也就是简单的文字识别(你总不可能把这些文字做的多花是吧),但是至少“稍微”的增加了“一点点”成本。
再恶心一点,下发下来的图片中间是糊的,要复制(查看)完整的号码,请输入验证码,验证码够变态的话这个成本还是会比较高的。
有多高呢?
你可以搜索一下 验证码打码

-

问题被关闭了,我就把我刚才在评论里面写的放在这里吧,希望你能够看到,至于最后你选用什么方法……按照广泛的实践来看,对尝试多次的用户要求验证码是最靠谱的。

首先,下次请写清楚你的需求,如果按照你原来的问题,我只能说:防采集不需要后端加密,这里所有人已经和你解释了。任何形式的加密也不会提高一毛钱的采集成本。这不是可不可能的问题或者有没有这样的算法。为什么会这样呢? 因为,这就好象你在问:你能给出一个用螺丝刀锤钉子的方案吗?

当然是可以的……但是这么做的要么就是忘记造锤子,要么就是不是?

顺便一说,其实算法还是是有的,如果你一定要求一些算法上的事情的话。
可以用hash(电话号码 + salt),对你的下发的号码加密,只下发hash值和salt(如果要减少等待时间,就也下发几位号码),然后在客户端用js 暴力 破解出电话号码(8位)。
加盐是为了防止打表,这样每解密一个电话号码至少要消耗数分钟甚至数十分钟(视机器配置不同而不同)的时间,对你的用户来说也是这样的,你可以选择少加密几位号码,来减少这个时间,把它降低到几十秒。
这算是最“硬”的防采集方法了,相比起给一个token然后延迟多长时间。或者打一个验证码之类的做法,这样可以100%的消耗掉采集者的CPU时间。
但是你会发现不管怎么做,你的用户的体验,和采集者的体验,是一样的。
而采集者远比用户有耐心多了,他可以把采集程序一挂,然后就去睡大觉,对采集程序来说这比验证码还爽,毕竟只要消耗的电费能值上采集下来的数据所能买出的钱就可以了。
而对于用户,则要像个傻叉一样苦等,这就是为什么,这里所有人都建议你通过各种类型的验证码之类的东西,来检验请求资源的,到底是人类还是机器。


用一个随机数来标记一个页面。

随机数存在cache里,cache的key用md5或者其他加密算法加密一下。

发送ajax请求获取电话号码的时候,服务端判断这个随机数是否使用过,
没使用过,就返回结果,并标记为使用过。

前端js什么都不用做。


没有你需要的解决方案, 按你的想法来, 破解的成本很低, 只要是客户端展示过你的解密脚本, 那么第三方就能通过阅读你的javascript源码去自己写相应的解密程序。从这点来看, 主流信息网站所使用的号码生成图片显示是一个初级解决办法,问题在于即便生成图片也不能像验证码那样制作各种干扰否则影响阅读,但是如果按格式生成,第三方会通过ocr去直接转换成文本入库。

我建议你不要直接显示号码, 而是自己制作个验证码去掩护真实号码。
点击《显示号码》按钮的同时,弹出四字成语,用户点选成功才显示。

【热门文章】
【热门文章】