当前位置:  开发笔记 > 后端 > 正文

ASP.NET应用程序中需要定时炸弹

如何解决《ASP.NET应用程序中需要定时炸弹》经验,为你挑选了9个好方法。

我们开发了一个定制的ASP.NET应用程序,可以在我们客户的Intranet上使用.看起来他们不太可能为此付钱,所以我们的老板希望我们引进定时炸弹.

[编辑:]仅请技术响应!对于CEOoverflow.com来说,这是一个好的(或合法的)想法是一个问题 ;-)

应用程序中的所有页面都继承自一个名为ApplicationBasePage的类,并且具有一致的错误处理,因此我认为在ApplicationBasePage的生命周期的早期抛出异常将是使应用程序无法使用的简单方法.我对你可能有的其他想法持开放态度.

我的问题是:我们应该如何以及在何处存储申请过期的日期?

有些要点需要注意:

该应用程序安装在客户办公室的单个服务器上.

应用程序数据保存在同一服务器上保存的SQL Server 2005数据库中.该数据库由我们设计,不用于任何其他内容.

该应用程序只能在其Intranet上访问:无法通过Internet访问该应用程序.

我们目前有远程桌面访问他们的服务器,但如果事情变得讨厌,预计会丢失.

该应用程序是用.NET 2.0编写的.

安全性由FormsAuthentication处理.

我们需要能够关闭定时炸弹或轻松更改其触发日期(假设我们仍然具有远程桌面访问权限).

服务器通常可以访问Internet,但最好不要依赖它.

定时炸弹只会锁定用户:它不会破坏任何数据.

除非它触发,否则客户绝不能意识到定时炸弹的存在.

他们的IT人员会愉快地在web.config或数据库中进行讨论.他不是程序员,但他并不害怕改变事情"只是为了看看会发生什么".对应用程序进行反编译或逆向工程将超出他的能力范围.

对于额外的信用,您认为在这种情况下通过默默无闻地依赖安全性是多少?

[ 编辑: ]

该应用程序执行许多关键业务关键日期,因此我们可以确定它们不会更改其服务器上的时钟,因为这会使应用程序变得比无用更糟糕.

nailitdown.. 45

"他们看起来不太可能为此付出代价,所以我们的老板希望我们引进定时炸弹."

一位不称职的商人要求您实施业务问题的技术解决方案.如果你的客户不打算支付,你的Boss应该像成人一样处理这种情况而不是像高中黑客一样使用逻辑炸弹.

这是不道德的,可能是非法的,但大多数情况下它只是愚蠢的.



1> nailitdown..:

"他们看起来不太可能为此付出代价,所以我们的老板希望我们引进定时炸弹."

一位不称职的商人要求您实施业务问题的技术解决方案.如果你的客户不打算支付,你的Boss应该像成人一样处理这种情况而不是像高中黑客一样使用逻辑炸弹.

这是不道德的,可能是非法的,但大多数情况下它只是愚蠢的.


你可能是对的,但说实话,如果我经营这家公司,它将在几年前破产.我会将管理决策留给他们,我会坚持编写健壮的代码.(我会考虑指点我的老板到这个页面......)
+10,如果可以的话.试图通过技术手段解决非技术问题会产生其他问题,可能无法解决原有问题.
我同意teedyay.他的问题不在于这是否是一个好主意,他在询问实施它的技术方面.如果他们使用它来禁用程序,或使用新的技术见解来增强安全性,那么他只是在寻求技术帮助.
这可能是不道德的,但那么你的账单是否也有点不道德?

2> Rune Grimsta..:

我同意将其称为试用版并让它过期的评论.在我们的一个产品中,一个Web发布系统,我们有一个公共页面类,它将检查用户许可证密钥,如果它无效,我们将在所有页面的顶部打印出一条消息.消息非常明显,但不会影响程序的工作方式.

为了进行检查,我们在web.config文件中存储了"注册密钥".我们将其与我们计算的密钥进行比较,并将计算它的算法存储在单独的程序集中.如果密钥匹配,我们假设产品已获得许可.

对于我们的使用,我们仅为注册密钥calulcation算法提供客户名称,但您可能希望添加版本号或其他日期.然后通过计算所提供名称的MD5散列以及分段代码(数组中的一些随机字节)来生成注册密钥.

这绝不是万无一失或非常坚实,但它很简单,足以供我们使用.



3> Nikhil..:

这里有一些我能想到的事情

    放置依赖于您的一个人登录的逻辑炸弹 - 因此在最后一次登录应用程序关闭的特定天数内.

    使用基于日期的锁定并将日期存储在SQL Server的表中.但是使用标准算法加密存储的值,该算法使用代码中隐藏的盐.这样就可以避免将日期暴露给sys-admin.

    使用上述方法存储一个大的整数值,一旦应用程序加载到IIS中,您就可以倒计时 - 一旦达到零,删除数据库中的值并锁定应用程序 - 您必须使用加密来重置该值再次工作.

    如果这个应用程序的默认安全是好的,但如果你想把它作为产品推销,那么你需要某种加密.

这些都不是万无一失的......
免责声明:我不是任何法律专家 - 我仅从技术角度回答这个问题.我个人不会这样做,因为我认为这在道德上是模棱两可的.



4> Alex Zuroff..:

我真的没有看到任何可以很好地结束的场景.如果您担心付费(并且他们可能会担心在应用程序交付之前付费),那么设置某种托管服务呢?他们通过相互商定的释放资金的条款将付款存入代管,然后您继续工作,知道资金已被搁置直至您完成.



5> blowdart..:

抛开道德问题,如果您担心序列号实施被黑客攻击,为什么不使用X509证书?例如,如果您安装了安装了证书服务器的Windows机器,则可以在Internet上公开证书吊销列表.

向每个客户端颁发客户端身份证书(如果您要向中央服务器提供更新检查,则可获得奖励 - 现在您可以使用客户端/服务器HTTPS而无需担心密码).

如果客户没有付款则撤销证书.在您的应用程序启动中,只需加载证书并检查其有效性......



6> teedyay..:

感谢您的所有回复!

我们并没有完全按照任何一个人的建议去做,而是使用了你们中的几个人的想法.

首先,我们不再称它为定时炸弹,而是将其称为许可证.由于该软件目前(可以说)是不完整的,并且由于客户尚未付款,我们可以将其称为过期的测试版本.这(可能)让我们超过了大部分合法的雷区,并且(正如zsharp指出的那样)如果他们声称产品不合格,他们就不能抱怨如果他们不能使用它.

无论如何,技术实现如下:

我们希望将失效日期隐藏在不会偶然发现的地方,如果它被注意到,则采用不易修改的形式.它也必须在某个地方,我们可以肯定不会无意中受到影响,即使它在服务器上我们没有那么多的控制权.

因此,我们对失效日期进行了加密,并将其放在应用程序使用的数据库的扩展属性中,从而赋予其适当的误导性名称.

应用程序在启动时检查密钥,如果应用程序尚未过期,则将静态布尔标志设置为true.如果标志为false,站点中的每个页面都会检查此标志并将用户弹回错误页面.

由于以下原因,我们对此解决方案感到满意:

我们很容易更改应用程序的到期日期.

不依赖于可访问的互联网,也不依赖于服务器以外的任何其他东西.

保护将在备份和恢复或应用程序移动到另一个框中后继续存在.

当争论停止后,他们已付给我们,我们再次成为所有朋友,下一次升级到他们的应用程序根本不会检查它,确保这些被遗忘的代码不会在某些情况下被意外触发点了几年(谢谢,克里斯汀!).



7> Coxy..:

他们的网络服务器是否可以访问互联网?除了其他方法之外,您可能希望利用Web服务来触发定时炸弹,因为wily系统管理员可能愿意将服务器上的时钟设置为几年.



8> Dscoduc..:

几点需要考虑:

这甚至合法吗?假设你没有计划披露这个复活节彩蛋," 除非它触发,顾客必须永远不会意识到定时炸弹的存在 ",你可能会遇到一些法律问题......

如果客户可以访问源代码,那么我无法想象您如何能够包含他们无法聘请开发人员删除的任何内容.即使IT人员不是开发人员,也不能雇用其他开发人员对代码进行逆向工程.

最后,糟糕的业力......如果你真的与一个你不认为自己付钱的客户合作,那么为什么要与他们合作呢?我希望你能把所有东西放在桌面上并在完成工作之前得到客户的全面承诺.如果客户承诺付钱,那么我会走路..



9> Michael Stum..:

如果客户拥有该软件的所有部分,则无法完全阻止它.

唯一正确的方法是使应用程序依赖于您拥有的某个组件,例如,它可能需要在一段时间后激活,或者ping到您的Web服务器.

这可以通过获取安装日期并将其用作某种盐/加密密钥并使用它加密所有数据来实现.然后,您可以与该安装日期进行比较.如果客户用它拧紧(将时钟设置回来),您会注意到它,因为您有原始安装日期.如果他们更改日期,那么也会更改加密密钥,因此无法再解密数据.

还有一种解决方法,但是对于任何基于时间的解决方案,你都需要保持安装日期作为比较的基础,并且你需要使这个修补程序安全,因此使用某种加密的想法用它来保护所有数据.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有