有时候,我们不得不开发一些所谓的”调试用”代码。
但是,不要忘记了,虽然这些调试代码只是用来调试的,但是并不意味着我们就可以忽略掉安全性。
我记得,曾经有一位客户问过如下的问题:
我们正在开发一个后台服务,为了调试方便,我们想连接这个服务并提取一些存储在服务中的私密数据出来,通常情况下,这个数据不应该被任何人接触到。通过这种方式,我们就可以对比下,看看这些数据是否是我们所预期的。这个只是用来调试而已,在正常工作阶段它不会被调用。对于这种场景,你有什么建议呢?
请记住,网络上的坏家伙们可不管你的代码是正常的业务代码还是调试用的代码,一旦他们发现了代码中的漏洞,就会发起攻击。
这个客户花费了很多精力来保护这个内部数据,确保后台服务不会以任何方式泄露此数据,但是上面的想法完全违背了他们的最初目标,并且留下的这道后门将会为黑客提供攻击点。
虽然他们开发了很多保护性代码,但是和他们开出来了这个口子相比,这些保护性代码都没有意义了。
我有一个打印机驱动程序,它总是会在驱动器的根目录中创建日志文件。这个日志文件是全局可读的,其中包含我打印的每个网页的地址。如果我以管理员身份登录并删除日志文件,则下次打印文档时它还是会创建这个文件。
我假设打印机供应商出于诊断目的创建了此日志文件,但它同时也会产生安全漏洞。系统上的每个人都可以看到由其他人打印的任何网页地址,这就是所谓的”裸奔”了。供应商是舒服了,但用户就没那么幸运了。
总结
在开发拓扑梅尔智慧办公平台 (Topomel Box) 的初始阶段,我花了些功夫研究了一些和”主业”不那么相关的主题,例如网络传输加密,本地数据加密等,虽然这会导致进度缓慢,但带来的是那些看不到的回报,例如: “用户的信任”。
我们不能辜负用户对我们的信任。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Your debugging code can be a security hole》