作为一名自由职业者,我继承了许多开发不良的自定义Web项目.大多数这些项目都不能防止XSS和SQL注入.在其中一些项目中,我是唯一一个超过1年的开发人员.当客户要求我添加新功能时,我会在不对底层系统架构进行重大更改的情况下执行此操作.
因此,例如,如果客户要求我在有限的预算下构建注册页面,我会重新使用系统的数据访问对象,这不会阻止SQL注入,并且我使用系统的View Objects渲染页面清理XSS的代码.
如果以后黑客在注册页面中利用这些安全漏洞,我是否要追究其责任?我从未被要求重新编写系统数据访问对象或视图对象.而且由于客户的预算有限,他们不会付钱给我写一个新的DAO或View for the system.那么在我决定继承这样一个灾难性项目的那天,它会自动成为我的错吗?
如果系统的其他部分我很少接触怎么办?我可能已经改变了视图中的一些文本,或者if
在控制器中添加了一个新语句.一旦我"触及"某些东西,这是否意味着我对整个模块负责,直到我退出项目?
告诉他们您看到的任何问题,并包括估计修复它们所涉及的时间.把它写成书面,你把球放在球场上.他们不能对自己未能注意到您的警告承担责任.
让我补充一点,如果我能在15分钟或更短的时间内解决许多这些问题,那么我会这样做,就像我个人对自己的工作感到自豪一样.
在接手一个新项目时,我会向客户明确表示我不对原始来源中的错误承担责任,除非他们还要花我的时间进行完整的代码审查.为了保护自己,请确保在获得原始代码时保留原始代码的副本.
这里有两个不同的问题:
在这种情况下你如何保护自己?
您确保拥有原始代码的副本,并使用良好的源代码控制系统,以便在出现问题时,您可以清楚地说明这不是您编写的代码,而是在您开始之前存在的代码.
在这种情况下,您如何做到客户?
您可以事先向客户询问他们希望您做什么样的分析:潜在的代码改进,安全修复等.考虑一下您可以给他们的类别,以便对您将要审阅的内容以及哪些类型进行全面了解你可能会找到的东西.
为什么要预先?因为否则你会得到汽车修理工具综合症,你在车里接受,机械师说:"哦,顺便说一句,我们在这里发现了这个问题",你感到不安,因为你不确定它是否真实.但是如果你要求机械师给它一个好的结果,至少你会觉得如果找到了什么就会更舒服.
同样,如果你能够预先找到这样的东西,那么你可以制作一个列表并向他们展示代码并说明问题,你看起来像是一个专业的分析而不是一个粘糊糊的机制试图制作一个可疑工作的额外降压.