|  RSS订阅  |  加入收藏

启用CDN后,QQ互联登录出现异常的问题。

启用阿里云CDN以后,出现QQ授权登录出错,回调地址正常,应用无法回调后续动作。此问题适用于其它第三方授权登录在启用CDN之后无法登陆的情形。
摘要
...

博客群里的网友都说网站真实IP没隐藏有巨大的被D风险。隐藏网站真实IP最简单的办法就是做内容分发网络,用户在访问网站的时候是访问就近的CDN节点,ping出来的IP也是CDN节点IP,有效阻断了对源站服务器IP的探测。

网上有很多免费的CDN可供使用,如百度云加速,但是普遍存https不支持或者收费。并且多数CDN都提供了一定量的抗D清洗服务。只不过都很低,在真实DDOS攻击下,瞬间就荡然无存了。真正有用的也就是隐藏真实IP这一个功能了。

折腾配置CDN

下午没事开始折腾CDN,网上找了一圈也没合适的,群里推荐的上海云盾,流量限制50G,目前限时免费阶段。尝试注册了一下,发现需要实名认证提交后,3个工作日审核,审核通过才能使用。接着有看了下百度云加速,发现免费版本不能支持https,需要购买专业版以上才能使用,最低的专业版1190一年。所以放弃了。鉴于网站部署在阿里云CDN上,就在阿里云上看了下CDN的产品介绍。可惜,自从12月1号就进入商业收费模式了。不想再另寻CDN了,其它服务商肯定也是要认证的,这大放假的肯定没人,所以就直接阿里云CDN吧。支付120元500G一年的量另加https的请求包50元,不知道被攻击一次,被消耗的量算不算在内了。

发现QQ授权登录异常

晚上吃完饭准备来改造登录后修改用户名和添加用户网站信息这块功能。发现点击QQ登录后,无法正常跳转到登陆后的界面,卡在callback地址上不动了。虽然我知道是CDN造成的,但是没明白问题出在哪儿,就正常逻辑开始排查代码。先把站点调试模式(TP5的app_debug)关了,然后再次登录,看到错误信息3001。这个错误码是我自己定义的改造后的qqconnect错误码。

查错并解决

查源码Oauth.php(原Oauth.class.php)发现问题出在防CSRF攻击的state上。再次尝试登录,看了下地址栏callback后的code参数和state参数一切正常。也就是说授权动作执行完成了。那么问题就出在这个比对问题上了,我是通过TP5的助手函数input获取的state。尝试dump了一下state和code。都显示为空,没有获取到地址栏上的参数,无法和程序中的state变量比对,造成的错误。以为是助手函数的问题,又原本请求了一次,还是没有,最后使用原生$_GET也还是没有请求到内容。

冥想了一下,地址栏上的信息是被构造出来的,那么我访问的数据是CDN节点缓存给我的,地址栏的数据没有和我源站产生交互,突然想到下午在折腾CDN配置的时候的参数过滤问题了。阿里云的CDN有保留参数回源的设置,并且我还在后台测试的时候传输的ID和分页参数添加过了。天呐,这是有多蠢,竟然忘了这一出。迅速进入阿里云CDN控制面板,在域名管理里面,过滤参数中设置好保留的code和state两个参数。刷新页面后重新使用QQ登录,就一切正常了。未标题-1.jpg

打赏
  callback    CDN    QQ互联    
转载请注明出处,未经许可禁止商用!
西枫里 熊掌号
代码改变世界 ———— 半路出家,全程修道
发表评论
*依据《网络安全法》规定,您需实名认证后才能评论!
够认真。
@沈唁志:哈哈,谁让你不绑手机号。被黑名单系统阻止了。
这QQ登陆 恶心 还没评论就给我弄到黑名单了
@银色月航:欢迎偶像月航来访,蓬荜生辉。 阿里云CDN也有好多坑。第三方登录的好处就不用每次都填用户信息,不担心缓存丢失。
阿里云CDN开启了,一直没有时间搞第三方登录,貌似QQ互联还没有认证呢
@历史趣谈:首先欢迎来访。认真不敢当,年级大脑子不太好,怕下次又忘了,而且这个小坑坑了我两次了
博主太认真了
@Waylee:这么快就被发现了。。。
@西枫里人:没错的话,应该就是47.1*.*.102
@Waylee:还是有很多方法能查到IP的。能阻挡无聊的小白就好了。欢迎常来~
隐藏好了,但是一用心的话,还是很容易暴露IP的哦