远程激活/停用和防止停业

Posted

技术标签:

【中文标题】远程激活/停用和防止停业【英文标题】:Remote activation/deactivation and protecting against out of business 【发布时间】:2010-10-20 01:21:14 【问题描述】:

我负责一个使用互联网在站点之间传输数据的应用程序,并且一些客户在付款时感到尴尬,因此我们需要一种机制来允许我们切断非付款人的服务。我想防止管理员使用防火墙阻止我们的检查,但相反,我想为我们公司的网站因某种原因消失且无法访问提供一些余地。

我想象的方案是:

server makes twice daily check to web page using a URL like:
http://www.ourcompany.com/check.php?myID=GUID&Code=MyCode

然后这会返回一个响应,其中要么不包含任何感兴趣的内容,要么包含 GUID 和一个值。

GUID=0

那个零表示服务器应该停止运行。为了让它再次工作,服务器将每 5 分钟检查一次相同的信息,直到该值与它认为应该将其传入的代码转换为的值匹配。

这个方案对我来说很有意义,但问题实际上是如何防止阻塞。鉴于我们知道我们必须能够访问互联网,我们应该在无法从我们的网络服务器获得响应的情况下继续运行多长时间?是不是像 14 天,然后我们还是把它关掉是最好的方法?

【问题讨论】:

【参考方案1】:

我最终使用的解决方案与我建议的差不多。是的,使用此处概述的工具可以将其击败,但总比没有好。

该应用程序每天检查以访问包含使用公钥加密加密的控制文件的网站。它在内存中解密,如果找到它的 GUID,那么它必须匹配一个代码。要禁用该操作,代码设置为 0(零),这将始终失败。禁用时,它每两分钟检查一次以允许快速恢复。还有一种手动机制可以生成代码,在服务器出现故障时可以使用一周。

该代码最多允许 14 天不连接到服务器,然后才会将其视为故意阻止它。 10 天后,它会显示一条错误消息,要求他们联系支持。

【讨论】:

【参考方案2】:

这种方法真的很容易规避:只需使用本地 dns 服务器将 www.ourcompany.com 指向本地机器,或者使用 http 代理。然后用户可以向程序返回他们想要的任何响应。

假设用户没有绕开检查,那么你在没有确认的情况下继续操作多久是一个商业决定,而不是编程决定。

【讨论】:

嗯,是的。好的,我们将使用公钥加密文件,以便我们必须进行良好的下载和解码,否则它会“失败”。商业或编程决策?也许吧,但这是由我这个程序员来解决的。【参考方案3】:

用户可以使用诸如 OWASP WebScarab 之类的工具来动态更改值以颠覆您的安全模型。您需要包含一些更困难的内容,例如需要安全通道、比较公钥等。

【讨论】:

以上是关于远程激活/停用和防止停业的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何激活/停用某个尺寸类(方向)的布局约束?

仅在 WordPress 中激活和停用插件时运行 JS 文件

php 依赖插件激活/停用和警报

允许管理员激活或停用用户——Rails

NSLayoutConstraint 激活/停用

如何激活以前停用的约束?