12306 再次陷入危机,网友发起开源项目

  • 丁雪丰

2012 年 10 月 4 日

话题:安全架构DevOps语言 & 开发

中秋国庆难得八天长假,有人想要回家与亲人团聚,有人想要举家出游。每当长假,买火车票总是大家津津乐道的话题。回想今年春节前夕,铁道部 12306 购票网站的性能问题仍历历在目,众多网友献计献策,时隔几月,12306 再次陷入重重危机,3 亿多的天价疑云暂且不论,网站的漏洞层出不穷,页面频现完整错误堆栈,如此“豆腐渣工程”引起广大程序员的热议。

截止到 9 月底,在国内知名安全网站乌云上与 12306 有关的漏洞就已经不少了,比如 9 月 18 日的“中国铁路订票系统(12306.cn)修改任意用户密码”就让人捏了一把冷汗,而 9 月 27 日提交的“12306 漏洞一包裹”,通过曹政的一条微博更是引起了激烈的讨论。该漏洞的简要描述中这样写道:

XSS、绝对路径泄漏、SQL 注入(分站有个注入,好几亿的项目,没敢跑库, 跑坏了赔不起.......)

而曹政微博中给出的截图更让人瞠目结舌,直接将 Spring Framework 中的 DataIntegrityViolation 错误堆栈打在生产系统的页面里,其中还给出了具体的 SQL 语句,在生产系统中将错误堆栈直接呈现给用户的作法实在欠妥:

select * from TB_INFO_CLCS where flag = 'Y'  and czdm = 'G' and ziz like '%6'%' order by cxdm 

酷壳博主陈皓表示虽然这条 SQL 用了 like,性能不理想,但是推测该表是字典表,也就几十条记录,问题没有网友想象的这么大。在网上还流传着不少 NullPointerException 和 NoSuchMethodException,比如现在还可以访问该错误页面

弯曲评论上转发了一篇对于 12306 后台技术框架及异常堆栈信息的分析,文中不仅给出了超长的完整错误堆栈,还指出 12306 使用了如下设施:

  • 数据库:Oracle
  • 应用服务器:WebLogic
  • 开发框架:Spring\Hibernate\Struts
  • 连接池:C3P0

通过页面源代码还发现,网站上的 CSS 和 JS 文件居然放在同一个目录之中,这种做法让人感觉有些难以置信。

虽然 12306 的问题如此之多,也有网友提到 12306 的根本问题不在技术上,但还是有很多人纷纷表示希望通过社区的力量来帮助铁道部,让大家买票的道路更加顺畅。京东商城副总裁李大学通过微博表示:

为了程序猿们可以顺利在 12306 预订到火车票,我提议成立 12306NG 开源项目组。有兴趣参加的请转起来!我负责筹资并以一个程序猿老兵名义奉献不止•••

随后,12306NG开源项目组正式成立,在其官方论坛中通报了项目的进展情况:

在大家的支持下,目前本项目进展顺利:

1、已吸纳牛人 10 多枚,涵盖数据库、大并发、高性能、分布式架构等多领域。将逐步与大家公布。

2、项目范围日渐清晰,技术框架渐显眉目。

论坛中讨论气氛浓烈,有人从软硬件上给出建议,也有人认为主要的麻烦在于 IO,还有人从项目实施方面提出自己的看法。大家都指出,铁路购票系统与普通的电商和互联网网站有着很大的区别,其复杂度也远高于它们,所以不能简单地照搬那些网站的成功经验。

如果您也希望为 12306NG 项目贡献自己的一份力量,不妨关注其官方微博。期待在 2013 年春运之时,12306 在性能和稳定性方面能有所改善,让大家都能买到回家的车票。

安全架构DevOps语言 & 开发