触摸精致应用程序的麻烦

这是一个真实的(含泪的)故事,讲述了我们在办公室如何使同事满意并面对大多数客户以前经历过的事情,或者可能需要面对的事情:将服务器或应用程序迁移到现代次。

在我们的案例中,该应用程序是足球的博彩游戏 俄罗斯世界杯 –为了获得良好的办公乐趣。想法是,这是一个网络应用程序,同事可以在其中注册,预测世界冠军并猜测每场比赛的最终成绩。我们将拥有一个包含假名,电子邮件地址,密码和所有内容的用户数据库,以便每个用户都可以从排名的角度对赌博的进行方式和位置进行个性化查看。

我们一直在考虑的目标网络应用已成功用于最近的两个锦标赛,而在此之前,该应用已在我们之前的多个锦标赛中使用。它随着时间的流逝(近二十年)而发展,经过多次修复,并在断裂时重新工作。当我们得到它时,它已经拥有了自己的过去-听起来很熟悉吗?

制定计划

安装该应用程序涉及几个复杂的步骤,这些步骤从未得到正确记录(再次–听起来很熟悉),包括:

  • 准备好Windows Server盒(Windows Server 2016)
  • 在其上安装IIS
  • 将二进制文件/源文件和数据库文件复制到框中
  • 请注意,它不会启动并开始在IIS中进行明显的更改,例如:
    • 启用经典ASP –因为它是经典ASP
    • 启用32位应用程序支持
    • 确保应用程序池可以运行经典ASP
    • 在数据库上设置显式权限。

当使用管理凭据登录到系统时,我们会想起应用程序真正混乱和过时的情况。该应用程序生锈的管理界面使我们想起了2000年前的美好时光。该数据库是带有明文密码存储的Access MDB文件。当您沉迷其中时,我会服用我的阿司匹林。

足球博彩足球世界杯

面对现实,回到现实

毋庸置疑,采用这种解决方案以富有成效的方式运行,并且将您的同事的凭据存储在其中,因此越来越难对付自己。坦白说,有很多问题:

  • 它是经典的ASP,并且会暴露在互联网上。上帝知道代码是多么糟糕和过时,以及在不真正损害操作系统或IIS的情况下,通过过时的代码可以轻松地导出数据。
  • 管理员有权访问受保护程度欠佳的密码。即使我们告诉同事他们必须选择自己从未在其他地方使用过的密码-他们会听吗?
  • 我们没有针对TLS / SSL设置的域或任何内容。虽然这本身不是问题,可以纠正,但显然我们没有考虑。并且会付出额外的努力。
  • 我的意思是–有人真的知道该缩写词的含义吗?
  • 身份验证基于具有单独的(基于MDB的)用户存储的用户名和密码

更糟糕的是-我们不是开发人员,这更加危险:不知道自己在做什么,但仍在做。

现在距离世界杯比赛已经八天了,时间已经过去了,人们要求获得参加博彩游戏的权限。一次使用可以吗?绝对不是-因此,我们为该应用程序汇总了一个待办事项列表,如下所示:

  • 将MDB迁移到Azure SQL并更改所有处理数据库访问(读/写)的代码。
  • 摆脱所有处理密码的代码,并将其转变为基于安全的,基于哈希的密码处理密码
  • 确保即使在散列密码中也安全地存储了Azure SQL。
  • 启用TLS / SSL
  • 摆脱管理员读取用户密码(或进入我们的哈希表)的权力

分手后要往前看了

这已经涉及到许多更改和编码,这将在我们离开的短时间内浪费太多时间。即使进行了上述更改,我们也无法解决以下任何问题:

  • 它可能仍然是过时的,不可信任的代码-很久很久以前某人作为副项目编写的
  • 它仍然是经典的ASP,其生命周期已经由评论 2005年的ScottGu
  • 该代码并未针对UI,业务逻辑和数据库层进行分离。
  • 我们已经关闭了IIS中各种有用的功能,这些功能使其很容易受到攻击-是的,自2005年以来,IIS取得了许多进步。
  • 仍然会对我们的数据库进行身份验证,我们无法阻止用户选择他们用于其他用途的密码。

最后一点–我们认为这是一个问题,因为如果这些同事中的任何一个在任何时间点都受到损害,我们可能最终会成为怀疑从该平台窃取密码并在其Amazon,eBay,Facebook上尝试使用密码的嫌疑人…

那我们最终做了什么?我们的选择是:

(1)使用最新技术从头开始开发事物。附带说明一下,如果您是开发人员,则在财务上是独立的(不需要现金),并且正在寻找辅助项目– 跟我们说话.

  1. 提供一套不错的 身份提供者 给他们信任的用户-我们只是使用身份信息,根本不存储凭据
  2. 用一个 现代发展语言 和一个 现代平台 作为后端(PaaS)
  3. 通过以下方式设计数据库布局: 保护用户信息 (用户名,化名,邮件地址)内置
  4. 博彩游戏的杀伤力很大,但是–选择一种允许 缩放 并针对未来的世界杯和其他投注方案进行重新部署。听说过它?微软是 排球大 太。
  5. 博彩游戏必备: 自动加载 各自的匹配结果来自受信任的网站,因此管理员无需手动输入结果…想象一下起义,当输入最终结果时出错!
  6. 在一种现代架构上获得它,它不会让您只看页面和意大利面条式代码就费劲–并且将数据库访问与UX分开,并且具有 商业逻辑 在中间。

(2)获取一个现有的SaaS应用程序为我们执行此操作并使用它。

…显然,我们选择了(2)。

结论,您的收获是什么?

如何与您的业务或客户联系起来?每个企业都有一些旧的应用程序,对代码和二进制文件的了解很少。就像我们在这篇文章中概述的那样,数据泄漏后后果有多严重?对您的业务会有什么影响?这篇文章的目的是分享我们的思考过程,并概述服务器管理员面临的小问题。请继续关注有关服务器和应用程序迁移方案的另一篇文章。

标签

相关文章

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据 .