首页 » 网站建设 » php3c技巧_奇虎360一个官网首页的偶发 Bug 分析

php3c技巧_奇虎360一个官网首页的偶发 Bug 分析

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

与其说是BUG,不如说是偶创造象,这样开拓职员可无需修复了。
祝你们玩的愉快。

官网首页 home.html

php3c技巧_奇虎360一个官网首页的偶发 Bug 分析

怎么发生的

正常进入 kuai.360.cn 之后,给出这么一个 json 字符串,

php3c技巧_奇虎360一个官网首页的偶发 Bug 分析
(图片来自网络侵删)

{"code":1,"msg":"\u53c2\u6570\u9519\u8bef"}

格式化之后为

{"code":1,"msg":"参数缺点"}

为什么首页会产生这个缺点呢,到底是那个环节涌现的?是 web 做事器吗?是运用抛出的非常吗?查看之后创造,是首页网址进行了重定向。
被索引到这个资源访问位置

http://kuai.360.cn/%3Cbr%20/%3E%0A%3Cb%3ENotice%3C/b%3E:%20Undefined%20variable:%20redis%20in%20%3Cb%3E/usr/share/nginx/html/logger.php%3C/b%3E%20on%20line%20%3Cb%3E228%3C/b%3E%3Cbr%20/%3E%0A%3Cbr%20/%3E%0A%3Cb%3EFatal%20error%3C/b%3E:%20Call%20to%20a%20member%20function%20select()%20on%20a%20non-object%20in%20%3Cb%3E/usr/share/nginx/html/logger.php%3C/b%3E%20on%20line%20%3Cb%3E228%3C/b%3E%3Cbr%20/%3E%0A

对上述字符串进行 urldecode 转码得到

http://kuai.360.cn/<br />

<b>Notice</b>: Undefined variable: redis in <b>/usr/share/nginx/html/logger.php</b> on line <b>228</b><br />

<br />

<b>Fatal error</b>: Call to a member function select() on a non-object in <b>/usr/share/nginx/html/logger.php</b> on line <b>228</b><br />

已经很明显的指出了缺点位置,文件

/usr/share/nginx/html/logger.php

第228行变量名 redis 没有定义。
这个缺点级别是 Notice。

还有一个致命缺点 Fatal error,大概是这个缺点之后抛出的。

Call to a member function select() on a non-object

然后利用 select() 方法,浸染在了一个空工具上。

预测,该处代码类似是

if ($conditions){ $redis = blabla;} $redis->select('key_name')

这样就符合了两处触发 fatal error 的缺点信息。

为什么提示信息Notice也会抛出?这与PHP的运行解析机制有关,设置项

error_reporting = E_ALL

这是 php.ini 配置文件配置项,显然本项目没有修正。
或者在 logger.php 文件内显式声明。
以是才会把所有的故障信息抛出给客户端显示。

JSON 字符串是如何抛出的?

经由上面的提示,以及访问所在文件位置,可以推断

不是web做事器的问题。
php文件有可能是意大利面写法,随写随用。
如果是Object写法,可能触发了 try - catch 语句。
预测可能利用redis缓存一部分数据库交互的数据。
预测可能是键值不存在,触发了 undefined variable 缺点。
php缺点信息类型默认为 E_ALL,事无年夜小都要申报请示。
数据交互是在不同主机之间进行。
redis 缓存做事器单独做的支配?web 做事器要求与 redis 做事器发生了网络问题?

那么上面这个notice + fatal error 缺点信息,怎么就附加到了 url 要求上。

由于水平有限,只能挖掘到这里了,请大神在评论区附上更深度的创造。

正常流程的要求

如果该网页访问正常,会有哪些内容和要求呢。
在谷歌浏览器内利用 F12 进行查看。

可以看到,整体页面加载完毕,利用了 jQuery 发起的四个AJAX要求。
我们将有数据返回的要求贴不才面。

Request URL: https://kuai.360.cn/pb/lists?type=all&page=1&sign=50caadb0eca62c816aba2094871a4b1f&t=1581337695467&

返回的内容是JSON,经由美化后如下图:

网络要求返回JSON数据构造

网页内的动态数据均利用此办法渲染。

写在末了

虽然有效的信息,可以供我们深挖的信息不多,全体路由体系,以及数据交互办法,都不清楚。

那么仅仅知道首页路由,利用了根目录下的一个 logger.php 文件。

且该文件内的方法,意外地由于缓存键值不存在,而获取失落败。

最不应该的,这个 $redis 声明在局部。

PHP 是弱类型措辞,其变量声明,变量类型,和数组索引极易涌现不在掌控之内的事。
360 的程序员该当打上这个补丁。

我是@程序员小助手,持续分享编程与程序员发展干系的内容,欢迎关注~~

标签:

相关文章

大数据全包,引领未来数据管理新时代

随着互联网、物联网、云计算等技术的飞速发展,大数据时代已经来临。在这个时代,数据已经成为企业、政府和社会组织的重要资产。为了更好地...

网站建设 2024-12-17 阅读0 评论0

大数据修图,技术革新引领影像艺术新篇章

随着信息技术的飞速发展,大数据时代已经悄然来临。在这个数据爆炸的时代,图像处理技术也迎来了前所未有的变革。其中,大数据修图技术以其...

网站建设 2024-12-17 阅读0 评论0