记一次很久以前的出现的线上事故。

php.ini request_order

在之前的公司,曾今出现了一次线上运营事故,因这个bug导致项目延迟上线两小时。

故事是这样发展的,用户打开了http://xxx.xxx.com/xx/xx?openid=13445 这里的openid是分享链接带上的参数,然后根据这个openid进行了一系列的业务,帮这个分享者加游戏次数,加奖品。。。。。

代码如下:$shareOpenid = $_REQUEST['openid'];然后奇迹就出现了,某些人访问该链接时,明明url后面的openid参数是A,结果代码中变成了B!!!

why!

聪明的人也许觉得这就是一个沙雕问题。没错,确实很沙雕,在第一行就写了原因。php.ini 中的request_order设置决定了预定义变量$_REQUEST的值及排序。当时的配置是gpc,也就是说如果querystring 中存在参数openid值为1,post fom-data中存在参数openid值为2,cookies中存在openid的cookie且值为3,那么通过$_REQUEST['openid'] 获取到的值就是3.

就是这么基础的问题。有一堆人访问了一个历史页面会设置一个当前用户的openid的cookie,然后就炸了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,700评论 1 49
  • Nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序...
    SkTj阅读 4,279评论 0 7
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,127评论 0 5
  • 秋声过后的几场淅沥雨宴 彰显着你的沧桑与凄美 同时也逐渐地孕育着新生的希望 风声变得冷冽 北风更加狂掠 似乎意欲召...
    六月天气阅读 1,612评论 34 59
  • 大最近这个系列我们讲述的主题是工具,工欲善其事,必先利其器,易效能就是把时间管理理念融会贯通,并通过工具来落地,今...
    Sunny婉儿阅读 351评论 0 1