自由职业者是否对从他人那里继承的糟糕代码负责?

时间:2009-12-18 18:47:44

标签: security

作为一名自由职业者,我继承了许多开发不良的自定义Web项目。大多数这些项目都不能防止XSS和SQL注入。在其中一些项目中,我是唯一一个超过1年的开发人员。当客户要求我添加新功能时,我不会对底层系统的架构进行重大更改。

例如,如果客户要求我在有限的预算下构建注册页面,我会重新使用不阻止SQL注入的系统数据访问对象,并使用系统的View Objects渲染页面它不会清理XSS的代码。

如果以后黑客在注册页面中利用这些安全漏洞,我是否应该对此负责?我从未被要求重新编写系统数据访问对象或视图对象。而且由于客户的预算有限,他们不会付钱给我写一个新的DAO或View for the system。那么在我决定继承这样一个灾难性项目的那天,它会自动成为我的错吗?

如果系统的其他部分我很少接触怎么办?我可能已经更改了视图中的一些文本,或者在控制器中添加了新的if语句。一旦我“触及”某些东西,是否意味着我对整个模块负责,直到我退出项目为止?

7 个答案:

答案 0 :(得分:23)

告诉他们您看到的任何问题,并包括估算修复所涉及的小时数。把它写成书面,你把球放在球场上。他们不能因为自己没有注意到你的警告而对你负责。

让我补充一点,如果我能在15分钟或更短的时间内解决许多这些问题,那么我就会为自己的工作感到个人自豪。

答案 1 :(得分:14)

当接手一个新项目时,我会向客户明确表示我不对原始来源中的错误承担责任,除非他们还要花我的时间进行全面的代码审查。为了保护自己,请确保在获得原始代码时保留原始代码的副本。

答案 2 :(得分:6)

这里有两个不同的问题:

在这种情况下,您如何保护自己?

您确保拥有原始代码的副本,并使用良好的源代码控制系统,以便在出现问题时,您可以清楚地说明这不是您编写的代码,但是在您开始之前就已存在

在这种情况下,您如何正确地做客户?

您事先询问客户他们希望您做什么样的分析:潜在的代码改进,安全修复等。考虑一下您可以给他们的类别,以便对您将要审核的内容有一个很好的了解以及你可能找到的东西。

为什么要预先?因为否则你会得到汽车修理工具综合症,你在车里接受,机械师说:“哦,顺便说一句,我们在这里发现了这个问题”,你感到不安,因为你不确定它是否真实。但如果你要求机械师给它一个好的结果,至少你会觉得如果找到了什么就会更舒服。

同样,如果你能够预先找到这样的东西,那么你可以制作一个清单并向他们展示代码并说明问题,你看起来像是专业的分析而不是粘糊糊的机械师尝试为可疑的工作额外赚钱。

答案 3 :(得分:1)

我无法从法律角度回答;这将取决于您所在司法辖区的书面和判例法。但是,从道德的角度来看,你应该做的最少的是找出缺陷及其对客户的潜在影响。让他们了解如果这些漏洞被利用会发生什么。

答案 4 :(得分:1)

当我自由职业者时,我会完成我付出/被要求做的工作,并就我认为应该完成的工作提出建议。

这实际上就是我如何处理我的大部分工作。我会完全按照我的要求行事,但作为一名专业人士,我几乎总是提出我对这种情况的看法。

我当然不会说你对此负有直接责任,但对此不说什么也不会很专业。

哦,我并不是说你必须通过整个代码库来解决任何潜在的问题...只是如果你遇到它们正在做什么,不要在地毯下扫除它们

答案 5 :(得分:1)

我认为你应该让你的客户了解情况。让他们知道他们正在运行的当前系统中存在哪些风险,以及修复它将花费多少以及如果不存在则风险是什么。

如果您让客户意识到您了解这些问题,我认为您不会承担责任(但我不是律师 - 如果有真正紧迫的法律问题请联系我们)。 / p>

在其他情况下如何处理?如果一个工程师遇到构造非常糟糕的东西但只给出了一个非常小的调整或修复的预算,他是否仍然要对所有其他问题负责?

答案 6 :(得分:0)

Spec It Out

当自由职业者时,您应始终向客户提供完整详细的工作规范,细分为您可以管理的最小部分以及每个部分的估计工时要求。

如果您注意到他们当前代码库中的明显问题您愿意补救,请创建您认为可以解决的某些事项的次要估计估算,并且确保包含解决问题的重要性。< /强>


最佳案例场景

在最好的情况下,您可以获得一些额外的工作,并且客户端可以获得改进的应用程序。


最坏情况

在最糟糕的情况下,您的客户拒绝修改现有错误/安全漏洞/代码膨胀的报价。这并不是一个糟糕的情况,因为您在将来出现问题时已经清除了您的责任。它还为您提供了一个很好的指示,可以不为客户寻求进一步的工作,因为他们显然不关心安全性或工作质量。完成项目后,请高兴。