微信公众号菜单链接防盗链

来源:互联网 发布:Mac照片循环播放软件 编辑:程序博客网 时间:2024/04/28 01:40

1:场景:微信公众号菜单链接为一个好友加油活动,微信分享到朋友圈,还有帮助加油,第一名可以获得iphone7手机一部(刚上市一周)

2:博主为防止有用户恶意刷数据,做了同一个ip地址限制100次给其他用户加油(后来发现ip是可以通过代理改变获取的外网ip),同一个用户只能给其他用户加油一次,用户必须是该微信公众号关注用户,助力请求做了动态参数加密来限制防止有人通过助力接口模拟助力刷助力积分,动态参数的实现http:xxxx?参数=加密后的value,参数在后台通过线程每5分钟生成一个随机数,后台缓存2个随机数,加密的秘钥也是动态生成,每5分钟随机一个,后台缓存2个,这样10分钟内助力都可以获取到,但是如果模糊请求是写死的就会被校验失败,不过实际应用中还是会发现有人能破译这个方法,那么如何才能保证用户是通过微信菜单点击的而不是通过复制链接模拟的?

解决方法:

原理:微信授权地址必须在微信浏览器运行,返回的code有时效且随机的。

我们都知道微信菜单的链接如果想获取到微信的openid是要通过授权的方式去请求,微信回调的时候传code给你,然后通过code获取openid,这个code是随即生成的,且有时效的,并且这个地址必须在微信浏览器运行,所以这个授权请求地址别人是模拟不了的,因为回调的地址是授权地址里面的参数地址,而code其他人无法获取的,且必须在微信浏览器运行,也就是说别人通过程序在非微信浏览器运行是无法成功的,只能在自己的手机微信上运行,这样只能获取一个或有限个的微信请求,我们做了IP校验就可以保证用户无法刷单了。

具体方法:我们要在助力活动的入库,也就是菜单链接就是授权地址,同时出口也就是跳转的页面返回的时候不能直接返回用户的openid,而是要返回一个token令牌,token和openid是一一对应的关系,放入缓存中,一个openid一个token且唯一,token需要有时效例如10分钟后失效,这样同一个openid多次访问页面,token也是不一样的,后面的页面逻辑都用token来对应该用户,这样就可以防止其他人盗用你的链接

0 0
原创粉丝点击