我是否应该在自己的应用程序中包含自毁方法?


39

最近,我有一个负面的经历,客户从账单中获得担保,但是我的中间人已经将我们的软件和设计上传到了客户服务器。客户原来是一个已知的罪犯,他当然更改了服务器的所有可能的密码。

但是,我仍然可以访问CMS的管理面板。不幸的是,事实证明,我的软件非常安全。。尝试过SQL注入,伪造图像上传等。但是,我无法破解自己的软件。。无论如何,我准备起诉这个人,所以不是问题..我现在在想,也许应该有一些后端selfdestruct方法。因此,如果发生类似情况,我可以选择终止该软件。

我自己的想法是在核心文件中隐藏一些功能。使用base64对其进行编码,因此不会很明显。所以像这样:

eval(base64_decode('ZWNobyAnSGVsbG8gd29ybGQhJzs=')); // echo 'Hello world!';

并基本上制作一个小脚本,该脚本将获取软件的所有文件,并确定chmod的文件,然后将其删除。
我的CMS较新版本都具有文件管理器,可以用来更轻松地进行黑客攻击。但是,如果对管理面板的访问受到限制,该怎么办。

非常清楚,这仅适用于我个人服务器或客户端服务器中的开发阶段软件(最后一部分在道德上值得怀疑。)因此,如果我的客户端应该盗用我的软件。。 -软件。
更明确地说,我们正在谈论那些罕见的自由职业。我认为这样做很合乎逻辑,因为合同工作不需要这种方法。因此,我们仅在开发模式下谈论这些跳高的客户-当项目准备就绪时,显然这在您的软件内部将是非常非常不道德的后门

  1. 从伦理上讲,这是个好主意吗?(请记住,当项目已达到100%并且已支付所有费用时,显然我会删除它)
  2. 你们是否曾经因为客户端的类似问题而不得不破解自己的软件?
  3. 关于这个想法,代码和方法明智的建议吗?
  4. 自毁脚本可能有哪些弊端或后果?

我对此的结论

遗憾的是,所有答案都针对合同规定的案例。确实,这是我的错,我没有在问题中更清楚地说明……。只是,很清楚,当您受到合同保护时,终止开关没有意义。
但是,如果您正在执行合同工作..则应在合同中注明-即使在客户自己的服务器内部,这也合法。但是,在我自己的个人服务器中使用kill-switch确实是小菜一碟(这是我真正想知道的事情)。

我决定为CMS制作kill-switch脚本。主要是因为这似乎是一个有趣的挑战。而且,如果客户是朋友的朋友,我可以将其用于我的非承包作品。.我可能不会在客户服务器上使用它,但是..对于客户或某些客户中间人可以访问我的服务器..并且我的软件被盗,或“在我不知情的情况下被移动”,然后我没有得到报酬,他们切断了对该软件的访问。

我在这里阅读了很多主题,他们建议在其中发送警告,然后删除该页面。好吧,我看到了一个问题,例如当我与某人打交道时,他会将其复制到其他地方(也许将其重新贴上标签并出售)并告诉我,该记录已被删除。而且,我不会“关闭站点”,而是将其删除。但是,我认为访问我的客户端服务器并将其删除仍然是非法的。或者至少通过后端而不是从FTP访问它。为此,我感谢所有回答的人。


26
您最好花精力对客户进行尽职调查!
史蒂文·A·劳

14
在代码中不仅保留已知的故意蓄意的安全漏洞不仅不专业,而且还使您面临法律风险。
凯文D

2
后门和炸弹可能不属于产品规格;根据您所在国家/地区的责任和合同法律,这可能构成违反合同的行为
Steven A. Lowe

11
我看到了这一点,立即想到,也许我以后需要
梅森惠勒

3
@KalleH.VäravasFreeland工作!=没有合同的工作。意思是“自雇且长期不致力于某位雇主的人”。几乎没有合同而做工作几乎总是一个坏主意,因为您要问这个问题的确切原因(客户会在不付款的情况下
逃跑

Answers:


38

我不是律师 听起来您已经有一个要起诉客户的人;当您让他或她担任固定人员时,我建议您征询他们的意见。

该网站上还有其他一些问题,涉及“终止开关”以及其他禁用开发人员尚未获得补偿的软件的方式。在合同没有规定这种可能性的情况下,简单地将其内置到“交钥匙”软件(您将在其中进行开发,然后将全部权利转让给客户)的做法通常被认为是一个坏主意。

首先,如果您的合同没有明确规定您可以禁用该软件以免付款,或者在完全收到付款之前客户没有该软件的任何权利,那么您就不能在没有以下情况的情况下进行任何“杀戮切换”违反合同。没有任何相反的用语,即“占有是法律的十分之一”,因此,一旦拥有他,这就是他的软件,要销毁它,就好像炸毁了您为他建造的新办公楼,如果他没有不付钱。

第二点如下;您向任何客户提供的任何合同均应具有以下效力:“根据合同的约定转让知识产权”。这意味着,即使您给了他使用软件的副本,在他全额付款给您之前,他也不拥有它。这将使您有权出于任何原因禁用其软件副本或任何软件副本,直到收到全额付款为止,因为这仍然是您的,您可以按照自己的意愿去做。现在,他违反了合同,而您还没有这样做,因此案件很容易让您的律师提出,同时您的客户也不会从他的不义之财中获得任何利益。

类似于建筑承包商的观点:一旦能够保护在建建筑物免遭非法进入,承包商通常将保留所有钥匙的所有副本,直到工作完成并签字。已全额收到付款。即使在交出钥匙之后,如果付款失败,他仍可以对财产附加留置权,并且在极端情况下可以收回财产。这里也是如此。您可以为客户提供进入该软件的密钥,但是您按住“主”密钥,直到您全额付款后,他才能获得管理访问权限。如果他现在可以进入并且不支付您费用,则可以“更改锁”并将他从软件中锁定。

但是,您已经为客户提供了该软件的“主”密钥,他已经离开并更改了所有锁,因此现在您无法进入。这不是它应该起作用的方式。您仍然可以要求赔偿损失,但是与此同时,歪曲的客户也可以使用该软件,将其复制到其他地方(这对承包商来说是不大的事情;如果承包商收回建筑物,则不必担心您'已经在另一批次上制作了完全免费的副本)等。基本上,您唯一的解决方法是强制全额付款,因为您不能保证您已收回该软件的所有副本。即使您可以保证他没有进一步的副本,您也可能不愿意将软件退回;这可能是自定义工作,您不能只是转身卖给别人。

请理解,无论您对软件拥有什么权利,他的数据都属于他。您无法触摸它。您可以停止他对自己构建的软件的访问,但是如果破坏了他的数据,这就像在回购他为之付出的建筑物之后烧毁了他的财产。您无权对该数据进行任何操作,并且必须将其完整保留在计算机上,或者如果没有软件就无法以合理的方式访问数据,则必须将其从与软件的纠缠中删除,并将其提供给可用格式(例如,人类消耗型数据库,印刷或电子副本)。


3
印象深刻的答案!谢谢。我同意您100%的要求,只是这个问题是针对自由职业者的,所以很抱歉,我可能在这个问题中没有明确指出。我决不会将这种方法用于合同工作,这只是常识,而且问题将是为什么..因为无论如何我都受到法律保护。但是,我说的是,当您与某人..谁想要汽车..的口头合同是由您为他建造的。然后他想看到它,而您正在制造它..然后开车离开。那么,在开发模式下,..拥有点火开关的点火开关会不会更容易?
Kalle H.Väravas2011年

11
这就是为什么在没有书面合同的情况下,您永远都不会为不雇用您的人从事开发工作的原因,这需要花费大量时间或资源。由于您将自己代表为独立承包商,所以它仍然是“自由职业”的工作,但是合同使您和您的客户都可以掩盖自己的后盾。它说明了双方将为对方提供什么(不仅是产品和金钱,还包括办公空间和计算机之类的资源),如果任何一项都未达成一致,将会发生什么。
KeithS 2011年

同意,我上了课。嗯,从理论上讲这是正确的,但这是不同变量的罕见组合之一。想要便宜(1000欧元)的朋友的朋友,我的CMS具有定制设计。我认为更清楚的是,程序员社区对此有何看法。谢谢您的回答,它仍然更多地集中在合同案件上,但让人们想到了非合同工作。
Kalle H.Väravas2011年

神话般的答案。
Teekin 2011年

21

从概念上讲,您是对的。您的执行全错了。

您需要提供过期的试用许可证。付清全部款项后,请给他最后的“永久”许可证。一切都是坦率和诚实的。


好得多的主意。
匿名类型

确实,第一个答案并没有争论“为什么不签约”或“使用unlink()违法”。我真的很喜欢你的想法,我可以用CRON煮些东西。
Kalle H.Väravas11年

@Kalle:没有人说“使用unlink是非法的”。什么人一直试图获得跨越的是,在美国,至少,有“未经授权使用计算机系统的”非常广泛的法律; 根据法律的规定,对我们大多数人来说,使用工作计算机在此处发布答案是一种犯罪。除非您有授予您权利的合同,否则远程禁用在您不拥有的计算机上运行的软件几乎肯定会违反该法律。当未经授权使用正在运行的系统时,禁用的软件是否被盗似乎无关紧要。
Dave Sherohman 2011年

@戴夫 我的意思是正确的,但是如果您考虑一下。如果没有合同,则不会设置条款和未设置的内容。然后,程序照原样打孔。因此,如果在软件被移动/被盗/交付时,kill-switch在代码中。那么使用该kill-switch(基本上是unlik()函数)是软件目的的一部分。.我已经与我的律师谈过,他确实指出,对软件进行黑客入侵是非法的(例如,使用filemanager上载取消链接脚本。)但是,如果将kill-switch包含在代码中(作为软件的一部分),则它是完全合法的。
Kalle H.Väravas2011年

19

否。如果您的客户发现您将被私刑。这一点都不安全。某人,某人将找到如何触发它的方法,然后突然间,您要与所有客户联系,以告诉他们有关此事以及他们为什么必须进行紧急补丁的任务。

如果您确实破解了它,那么您还将向刑事诉讼公开自己。我认为您有证据证明您仍然拥有该网站?您有权访问它吗?他的业务成本可能是“天文数字”

有可接受的替代方法。在网站上放置水印,以便每个页面都显示一条消息。付款后,您可以删除水印。


我懂了。我明白你的意思。作为记录,kill-switch将包含在非商业软件中,并且大多仅在我自己的服务器内部,或者至少在开发模式下。一些客户要求开发将在自己的服务器中完成,这使我处于非常脆弱的境地。我目前拥有所有文件,设计带有水印,我的名字叫“ EVERYWHERE”,我很有信心,我会赢得诉讼。。偷了他们。
Kalle H.Väravas2011年

17

这似乎是一个非常糟糕的主意,有可能使您入狱。

  1. 这是不道德的。客户的不良行为并不能使您正确地入侵他们的系统。
  2. 是非法的 这是以前发生的,对违规方来说是不好的结果。
  3. 这是毫无意义。您将如何处理不会给您带来麻烦的后门?您会勒索客户吗?
  4. 真傻 即使您可以做到这一点而又不被抓住,潜在的风险也远远超过任何可能的收益。

1
抱歉,您的答案缺少“为什么”部分。为什么这是一个坏主意,并基于我可能会入狱的原因?你能进一步解释一下吗?
Kalle H.Väravas2011年

3
我完全同意我的观点,@ Kalle是正确的。请说明原因。-1
史蒂文·埃弗斯

3
您是说杀死开关是非法的吗?如果合同规定在特定情况下将暂停服务,则可能不合法。
FrustratedWithFormsDesigner

这取决于您在何处开展业务的法律标准,但总的来说,法律制度会严厉惩罚将事情交到您自己手中的努力。他们真的希望您通过法院系统。在某些辖区,未经许可直接访问计算机系统是重罪,可处以监禁时间。您可能会争辩说这是您的软件,但是法院会说,这是由他们决定的,而不是您。
查尔斯E.格兰特

自由职业者想到了kill-switch方法。抱歉,我忘记在问题中提到这一点。我永远不会在合同工作中使用这种方法。在版权法方面,这里(爱沙尼亚)的法律事务步调较轻。我们有类似但不相同的版权法,例如瑞典和芬兰。就我个人而言,我以前从未与客户发生任何问题。有些延迟付款等等。但是实际上是一个暴徒,谁偷了您的软件-这是我书中的新增内容。
Kalle H.Väravas2011年

12

请不要问程序员,不要问律师。我想至少您会希望在合同中加入一条条款,说您有权按照您的问题打算做的事情做。(某些合同的“不可弥补的损害”条款是否会让您获得法院命令以立即关闭软件,直到法院有机会对其进行梳理?)我认为,法院命令对您而言比对法院更安全。代码炸弹(可以认为是犯罪分子,如果法院裁定您不拥有该软件,可能会造成财产损失,在美国,它可能属于《数字千年法案》中破译的数字加密部分,等等。我可以想象在民事法院赢得赔偿,并在刑事法院仍被定罪)。

规则会根据您和您的客户在哪里居住和经营而有所不同,因此我真的认为您需要律师。


好吧,取消开关主要针对自由职业者。签订合同要容易得多。当前情况基本上是这样的:我的软件在我不知情的情况下从服务器中移出,仅此而已。再说一次,这是非常明显的偷窃案-因此从法律角度来说,我并不担心。因此,当我的软件被盗时,kill-switch通常会在我自己的服务器中。不过,我开始觉得它仍然是一个坏主意。感谢您的答复,我几天后会见我的律师。
Kalle H.Väravas2011年

5

从伦理上讲,这是个好主意吗?

绝对不。这不仅使您看起来对诚实,诚实的客户不专业,而且我认为这也不利于整个行业。软件工程师确实对其客户或雇主负有责任,包括提供最高质量的软件。如果对付款或合同有争议,则有适当的渠道。降低软件质量是不合适的方法。

你们是否曾经因为客户端的类似问题而不得不破解自己的软件?

从来没有,尽管我从未做过合同或自由职业者。我一直是一个大型组织的员工(在某些情况下,该组织是根据合同开展工作的)。对我来说,这种想法是不可想象的。我宁愿提供令我感到自豪的软件,而不是降低我的软件质量以及对系统用户的道德责任,而不是降低自己的软件质量以及我对系统用户的道德责任。

关于这个想法,代码和方法明智的建议吗?

不要这样

自毁脚本可能有哪些弊端或后果?

除了明显的道德问题之外,我还会担心法律问题。我不确定破坏您自己的工作是否合法,即使是合法的,使用这样的漏洞利用也可能不合法。


谢谢您的回答。我编辑了我的问题,使之非常清楚,这基本上是100%对客户端隐藏的。因为它将主要位于我自己的服务器内部,并且仅处于开发模式。因此,当有人窃取我的软件时,我可能会杀死它。不过,开始更加明确的是,我应该使用法律而不是“武力”。
Kalle H.Väravas2011年

2
@KalleH.Väravas不管它在哪里,但实际上是您首先编写的。甚至有人可能会提出这样的论点,即将其置于开发环境中而不是生产环境中会变得更糟,因为这两个环境不再相同,并且它只是在开发和部署期间要解决的另一个变量。
托马斯·欧文斯

3

只需实施具有时间限制许可的许可模块,该许可模块将在到期时禁用该软件。这是软件行业中的一种众所周知的做法,您的客户不应反对它,因为稍后您将取消限制。

当您想限制功能并提供不同版本的产品时,这也可能派上用场。

终止开关只会带来太多风险,这是不值得的。


2

一个秘密的自毁功能是一个可怕的想法。是的,您会很聪明,将来可能有机会将其坚持给糟糕的客户,但这样做的麻烦多于其价值。

  1. 您仍然不会因完成的工作而获得报酬。是的,其他人不会使用您的代码;但您仍然会遭受付款不足的困扰。您认为某些罪犯会决定远程支付已经撤离他们站点的人的费用吗?他们会发现一些新的免费网站内容。

  2. 利用自毁序列,您可以对自己的法律问题负责。根据不同的司法管辖区,您很容易将其视为黑客行为/在破坏他们的数据(当他们要付款时,并且有很多令人费解的理由说明为什么他们不早付款)。即使您没有被定罪/未成功起诉,您仍然可能会收取巨额的律师费,并且麻烦多于其价值。

  3. 如果某个高薪客户以后浏览您的代码(或有一个CS朋友刚刚浏览了该代码以进行较小的调整),看到具有base64部分奇怪的功能,该怎么办,尝试执行它,并意外删除了Web应用程序(并且在您度假时会花点时间解决)吗?还是到处发布关于您的一堆公共评论,说明您不道德并在工作中留下后门?确定您可以在付款后将其从成品中删除,但是在使用VCS时,他们可能浏览了较旧的源,或者在付款后不希望您在他们的服务器上使用(那将是一个尴尬的对话;是的,我再次需要一个帐户,因为我没有并未删除秘密的自毁后门)。

  4. 如果犯罪分子备份其数据怎么办?您使用一个秘密的后门删除了他们的Web服务器,该站点处于脱机状态一两天,而他们(或朋友)发现了有问题的功能后门功能及其后退状态。

将来,请人们签署一份简单的合同,分阶段向您付款,并且在付款给您之前,不要让代码离开只有您控制的开发服务器和计算机。(如果他们需要在所有工作完成之前就将其投入使用,请确保他们已为正在投入使用的那部分代码支付了大约的费用)。如果他们希望将工作视为正在开发中,请让他们为您提供一些IP地址,以便为开发服务器打开防火墙(并可能使用巧妙的CNAME来实现)unpaid_work_in_development.example.com)。不能保证开发服务器的正常运行时间,并且如果您获得的流量超出了应有的数量(例如,您发现他们将很多人重定向到您的站点),请关闭防火墙,直到他们付钱为止。如果他们需要向您的Web服务器贡献内容,请让他们通过电子邮件向您发送内容建议,或者为他们创建一个保管箱共享文件夹,该文件夹仅有权写入其所占文件的小部分(在保管箱之外的VCS控制下)可以做出有意义的贡献(例如html模板)。


将来将其坚持给糟糕的客户吗?这听起来似乎是我没问过的甚至没有提到的。如果我没有得到报酬,但他会丢失软件,那么您的第一点有效吗?在我的问题中也有两点,在我自己的服务器和/或客户端服务器中使用kill-switch是符合道德/法律的。您没有提到您的意思。可以肯定的是,我可以在自己的服务器中使用kill-switchs。因此,当有人复制它时,我可以远程删除它。而且我认为,良好的客户无关紧要,因为该软件中不包含终止开关。它的1行。
Kalle H.Väravas11年

2

您问错了问题。要做和改进的事情不是添加某种远程终止开关(添加您或其他人可以使用的漏洞),而是要解决您的实际问题,这是安排付款和交付的较差方法。听起来您需要一个更好的托管系统(或所谓的住所)。

不要把时间浪费在淘汰开关上,要弄清楚您在其中搞错了什么。


-1对不起,但您的回答是题外话。好的建议,有点令人反感,但仍然可以。我不建议您做判断,因为您不了解整个故事,也不知道我通常如何开展业务。
Kalle H.Väravas11年

2

我想我会设计某种许可机制。这可能基于任何数量的商业或家庭构思,并且可能导致许可证到期后软件停止运行。此时,系统已被客户接受,他们已经付款,您可以提供不过期的完整许可证。

此方法还需要您所在地区的律师批准,但是其优点是您无需远程禁用该软件,并且可以事先指定它是系统的一部分。然而似乎很伤心,我认为你是和谁打交道拒绝摆在首位付出的人。


我开始真正喜欢试用软件的想法。但是,第二部分是不确定的。基本上,如果试用许可或什至是kill-switch将成为软件的一部分,则它完全合法。根据合同或非合同工作,应在合同中注明。
Kalle H.Väravas11年

2

这不是DRM吗?只要您在收到付款后就删除了“炸弹”,我认为它没有任何法律问题。只要确保您有一个可用的补丁来掩盖您的屁股并表明您没有恶意即可。

它使我想起某些公司的公司章程中的“毒丸”条款,该条款在发生敌意收购时会被激活。

有趣的是,这里其他一些发帖人表达的心态使我想起了为什么有些程序员会一直踩下去。如果更多的人在代码中放入这种炸弹,我认为程序员可能会得到更快的报酬……如果这是正常的话,我绝对不会有问题。人们喜欢偷别人的辛勤工作。期。如果是苹果等。可以从他们的东西中DRM地狱,那么我认为自由程序员也可以...


我喜欢您的答案,它比其他答案更好地说明了我的观点。我咨询了我的律师,他说,随后进入管理面板并通过filemanager上载取消链接的脚本被视为黑客入侵-非法。但是,如果软件中内置有实际功能,则它是软件的一部分,并且具有自己的用途。显然,这应该包含在合同中,尽管这个问题是关于非合同工程的。感谢您的回答:)
Kalle H.Väravas11年

0

实际上,客户端肯定会检查其日志,找到终止请求,从备份中恢复代码,移除终止开关并重新部署。


是的,但这取决于客户端,软件,服务器。以我为例,客户端几乎无法更改ftp访问。但是不可能检查日志。此外,该服务器不支持任何这样的logging..neither做我卑微的CMS ..
卡勒H.Väravas

-2

您的问题的细节清楚表明,这将是一个绝对可怕的想法。第一个发现这种终止开关的客户端(可能是在您使用了该终止开关之后,他们会从备份中恢复)将发布该终止开关以及您已将其包含在交付给他们的代码中的事实。您的声誉将被完全摧毁。

在您说“好吧,他们将成为僵局之前,他们将如何破坏我的声誉?” 考虑一个这样的场景:客户信誉良好,但其中一名员工使用了该代码的副本。他们解雇该员工,他查看代码,找出终止开关并使用它。猜猜是谁惹的祸?(提示:是你。)


我不同意。这实际上是一个非常好的主意。如果您仔细阅读详细信息,那么您将了解我在说的是非合同工作。在我的示例案例中,客户是有问题的。他的声誉是众所周知的暴徒,而我却试图保护自己。我认为这不会对我的声誉造成负面影响。您的方案听起来像是合同工。在这种情况下,我有合同,不需要取消开关。然而,如果没有合同,然后,他们不能得到该代码的副本要么..
卡勒H.Väravas

如果没有合同,那么您还没有签订合同来激活其硬件上的终止开关,对吗?馊主意。
大卫·史瓦兹

如果没有合同,则该软件的组成部分没有任何条款。如果kill-switch是软件的一部分,那么从程序员的角度来看是:是道德的吗?但是,这是合法的。因为kill-switchs目的是脚本的一部分,所以要删除所有内容的唯一目的是远程激活它。它是合法的,那为什么是个坏主意呢?
Kalle H.Väravas11年

1
因此,您说的是故意使其他人的计算机停止运行,而其行为未经他们的允许(如果您知道如果您明确询问他们是否可以这样做,则他们会说“不”),这在法律上是相同的作为执行无害操作的地方,您没有理由认为系统所有者会对您这样做有异议?我很想听听您向陪审团提出的建议。(向人射击枪支就像打开电灯开关,对吗?)
David Schwartz

1
您得到的答案仅与您提出的问题一样好。例如,您是否问过他们我在回答中讨论的情况?(一位前雇员想出如何激活消灭开关。)
David Schwartz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.