12306再陷入危机,网友发起开源项目
中秋国庆难得八天长假,有人想要回家与亲人团聚,有人想要举家出游。每当长假,买火车票总是大家津津乐道的话题。回想今年春节前夕, 铁道部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预订到火车票,我提议成立12306NG开源项目组。有兴趣参加的请转起来!我负责筹资并以一个程序猿老兵名义奉献不止•••
随后, 12306NG开源项目组正式成立,在其官方论坛中通报了项目的进展情况:
在大家的支持下,目前本项目进展顺利:
1、已吸纳牛人10多枚,涵盖数据库、大并发、高性能、分布式架构等多领域。将逐步与大家公布。
2、项目范围日渐清晰,技术框架渐显眉目。
论坛中讨论气氛浓烈,有人 从软硬件上给出建议,也有人认为 主要的麻烦在于IO,还有人 从项目实施方面提出自己的看法。大家都指出,铁路购票系统与普通的电商和互联网网站有着很大的区别,其复杂度也远高于它们,所以不能简单地照搬那些网站的成功经验。
如果您也希望为12306NG项目贡献自己的一份力量,不妨关注其 官方微博。期待在2013年春运之时,12306在性能和稳定性方面能有所改善,让大家都能买到回家的车票。
丁雪丰 是InfoQ中文站编辑,满江红翻译组核心成员,出版过《Spring攻略》、《JRuby实战》等多部译著。主要关注领域:企业级应用、海量数据计算、动态语言应用等。