假设有这么一个场景。某天,你接到一个任务,需要开发一个作品投票网站,让其他人访问链接进入活动页面,每天为自己喜欢的作品投票几次。这看起来很简单,但是有一个问题。整个过程没有登录系统,也就没有办法区分用户。那么如何存储用户数据呢?localStorage呵呵,看来只能这样了。但是治安太差了,分分钟会有人刷票。那么让我们来点更复杂的——心理战术。在不登录系统的情况下,稍懂前端的人会猜测用户数据存在于本地。由于前端存在权限问题,无法获取IP或MAC地址等唯一标识,因此只能保存在浏览器本地。所以我们需要将数据存储在localStorage中,只写不读,这是迷惑别人的烟雾弹。当然,这还不够,太直白了,还需要加密。不仅如此,我们还需要发送请求,让后台返回数据,同样是加密的。这也是一个烟雾弹,目的是过滤掉半生不熟的,降低风险。我们需要将真实的数据存储在不常用的地方,比如IndexedDB。IndexedDB是浏览器中的数据库。由于其使用麻烦和兼容性问题,很少被使用。综合考虑,所以我们使用localforage,这是一个npm包,有兴趣的可以了解一下。localforage更喜欢使用IndexedDB进行存储。即使我们将数据隐藏在这里,一旦前两层被破坏,其他本地存储也会暴露出来。然后尝试最后的欺骗,对数据进行加密,key和value是由空格组成的数据,即使数据在变化,也很难被感知。当然这样还不行,我们加个临时变量,把数据存到内存里,先用内存里的数据,没有数据就去localforage取。以上就是整个策略,①xhr虚假请求②localStorage混淆③偏门存储④空白数据⑤内存保护明明是一个简单的功能,却这么复杂。没办法,我前段时间刚遇到。