1

我的工作中有一个 Django 应用程序,只能在内部网络上使用。

目前我们使用 Excel 导入数据,但这是一个非常容易出错的过程,我想替换它。

我想在 Javascript 中提供一个丰富的 Web 应用程序,它公开了来自主 Django 应用程序的一些但不是全部数据(菜单的查找值)。这将在对外界可见的服务器上运行。

那么有什么好的方法呢?

管理层担心将主 Django 应用程序提供给外部世界的安全性,我也更喜欢中间层 - 我认为编写一个小型服务器端应用程序比检查当前代码并确保更容易它对外界来说足够安全(我学习了 Django 构建这个应用程序,所以一些旧代码没有按照最佳实践完成,但确实可以按需要工作)。我还希望它保留新数据,直到有人在导入主数据库之前检查它看起来不错。(我是唯一的开发者,所以有时间考虑)。

所以我现在能想到两个选择。

1:在面向外部的服务器上有一个小型 Django 应用程序。这可以与主应用程序通信以获取查找所需的值,并在导入之前存储输入。这些表将基本上反映主应用程序,并在主应用程序表更改时需要更新。

2:有类似的东西,但不是使用数据库,而是使用面向外部的服务器来联系内部服务器上的 REST 接口。类似于使用 Django 非关系从主应用程序的 REST 接口获取数据。在主数据库服务器中放置一个导入表以存储数据以供审批。

这些方法是好还是坏?还有其他建议吗?有没有学习 n 层应用程序的好资源?

4

1 回答 1

1

如果我对您的理解正确,您希望一小群受信任的用户能够访问内部数据库。已经有一个内部 Django 应用程序访问该数据库。

管理层担心让这个应用程序或它的扩展可用于一般互联网。

我认为他们的担忧是非常有道理的。如果您只有有限的一组用户访问导入功能,请将身份验证从 Django Web 应用程序推送到 HTTP 服务器/平衡器/前端。

例如,设置一个 apache 外部网络服务器,强制所有对您的 Django 应用程序的访问都经过加密(HTTPS)和身份验证。可以使用服务器上的静态文件通过 HTTP-Auth 对用户进行身份验证。密码更改/用户添加必须由登录服务器的管理员完成。

只有在完成此登录后,才能访问具有自己身份验证的 Django 应用程序。我会选择一个单独的导入应用程序,而不是扩展主应用程序。这个小应用程序可以在主数据库上以减少的权限运行,以实现纵深防御。

此设置为您提供了一些额外的接口/故障点,同时对随机 Internet 用户保持较小的攻击面。您可以聘请安全顾问来审核您的 apache 配置,并确保您锁定了更大的 Internet,并且只需要担心经过 HTTP 身份验证的用户。

到目前为止,我已经运行此类设置 15 年了。用户对双重身份验证感到恼火,网吧中的密码保存HTTP-Auth 的一个问题,但通常一旦设置它就非常无缝。

于 2020-11-20T12:26:38.937 回答