delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

23 Dec 2006

招商银行专业版的开发人员到今天还是没有学会如何撰写64位Windows驱动服务

又是等待了将近一个月,很遗憾,对于为招商银行写驱动的这位兄弟,不是我那么想在快过年了的时候跟你过不去,而是——你让我在从11月6日到今天——12月22日——将近两个月的时间里,我一直对你抱有希望,抱有期待,然而,直到现在,今天我所看到的、经过招商银行再次签名确认的5.1.3.9版本,依然无法在Windows 2003 x64版本上无法运行,这两个月来,我一直不得不依靠电话银行甚至ATM来进行所需的工作。

原因依然是,你花了两个月的时间,竟然仍然不了解如何撰写一个能够支持64位Windows版本的程序——我们且不论你的程序是否需要这个服务,是否应该安装一个捆绑我的键盘的驱动——你依然在我行我素地坚持将可执行文件或动态连接库命名为.dat的错误习惯,更过分的是,你甚至不曾找过一个64位版本的Windows 2003来进行哪怕一点点的兼容性测试,在我看来,根据我对银行这个行业的粗浅了解,这样的程序能够经过重重的发布审计,并最终发布,是令人震惊的。

哪怕是一家非常小的作坊式软件企业,花了两个月的时间,也应该想到「回退到已知正确版本」这最后一招了吧?

作为一个用户,我给你打的分数是——不及格

在此,本人想对招商银行、以及相关开发人员,提出三点质疑:

1、为招商银行开发‘个人网上银行专业版’这一产品的某些开发人员,是否具备开发具有与最新的Windows体系结构兼容程序的能力?

作为一个Windows开发人员,仅仅熟悉MFC、Windows API和KPI是不够的。有资格开发驱动程序的开发人员,不仅需要掌握前面这些知识,更需要对操作系统的架构、新近所做的技术进展具有「面」的了解,并对自己开发的部件的设计实现、涉及的潜在兼容性问题和系统为其提供的支持具有深入的了解。从安装程序将文件安装到SYSWOW64目录我们可以知道,这位开发人员并不知道32位Windows程序在64位Windows系统上看到的System32目录在什么地方——这是现在开发驱动的开发人员所必备的、最基本的知识;从之前安装程序忽略错误继续安装,到现在安装程序不分青红皂白地修改注册表完成服务的注册,到启动时引起Windows给出某些服务无法启动的对话框,我发现这位开发人员非常喜欢绕过而不是解决问题,而绕过的方法,又不那么高明,这位开发人员也许很注意观察,可惜他并不愿意思考和查阅MSDN这样的资料;从发布版本一而再、再而三地出现如此低级的兼容问题而不改正,我更严重质疑这位开发人员,是否有哪怕找一台运行用户如此详细地报告过配置的环境运行来测试一下的、最基本的职业素质——就算你一时写不出能够在64位的Windows 2003上运行的程序,两个月的时间——在我看来,即使是我这样的、很久不开发Windows程序的开发人员,哪怕临时查阅MSDN,用个十分钟的时间——难道检测一下用户Windows版本是否与你的程序兼容这样的程序都写不出来吗?

更可笑的是,这个安装程序在无法覆盖文件时,只给出了一个建议——重新启动系统——并给出了一个很不友好的提示立即退出,不曾清理留下的服务注册,我不清楚,如果我的计算机安装了这个服务并且成功,下次我启动系统,是否那个服务就不能自动启动了?那个文件是否你就能覆盖了?什么事情都让用户重新启动系统并自己手动重新安装,微软发布Hotfix岂不是人人都得把gdi之类的玩意停止?

最后,写出这样的程序,并把问题丢给自己公司的客户服务部门,有没有考虑过自己同事的感受?有没有考虑过自己公司的形象可能因此受损?作为一家公司的雇员,这种的行为是否称职?

2、招商银行是否对‘个人网上银行专业版’这一产品使用了版本控制工具进行代码管理?是否有完善严密的发布流程?

我对这一点深表怀疑。

回退一个有问题的变动、逐一重放变动、测试、发布这样的流程,在任何一家软件企业都是十分重要和基本的、家常便饭的工作。作为发布版本的负责人,对于出现的问题,无非采取两种办法——要么回退,要么修正,或至少制定修正计划。个人网上银行专业版一直都在升级,但对于新版本增加的所谓「安全」功能,却几乎只字未提;增加一个驱动这么大的事情,更是从未以官方的、正式的方式告知用户。

对于一个有完整的版本控制工具使用经验、完善的发布流程的开发组织而言,这样的疏漏是很难发生的。对于招商银行的‘个人网上银行专业版’这一产品,是否采用了版本控制工具和发布流程来保证发布版本的品质,我深表怀疑。

3、执行这些所谓「安全特性」的开发人员,是否具有足够的安全知识并胜任此工作?

针对这一点,我打算以大家能够读懂的方式来提出下面这个问题:截获用户键盘输入,哪怕仅仅是确认用户是在本地输入的口令,能保证用户口令的安全吗?

答案是不能。

真正的攻击者,一定会设法替换本地的客户端程序,提供一模一样的界面来骗取用户口令。这种手法,在过去曾经有过很多其它生活中的案例,例如自行安装一台「提款机」,并复制用户的磁卡和密码。这种提款机不必具有真正的提款能力,只需告诉用户密码错即可。许多人第一次并不会输入错误密码,而提示错误之后,更可以再次确认用户输入的口令是否相同,并以退卡的方式回应用户。许多人并不会意识到自己被骗。国内也出现过某银行被退休人员在小区开了一家冒牌银行,并办理业务骗取存款的案例。

作为一家银行的专业安全人员,理应很熟悉这些案例,而不是采取这类无效的过度设计。

招商银行出于对用户负责的考虑,已经对没有数字签名这一现象进行了改进,但兼容性、安全性方面的问题,仍然有待改进。从2月份招行获得和讯最佳网上银行称号,到现在的这种种转变,不能不令人深思和扼腕叹息。