客户端服务器安全架构

Client Server Security Architecture

我想了解如何最好地设置安全性最重要的客户端服务器架构。

到目前为止,我有以下内容,希望有人能告诉我它是否足够好,或者还有其他我需要考虑的事情。或者,如果我有错误的一端,需要重新考虑事情。

我真的很想知道是否需要任何其他步骤或层来确保此安全。将所有内容都存储在云中是明智的,还是我也应该拥有一些物理服务器?

我已经尝试搜索一些可以帮助我理解的图表,但我找不到任何似乎合适的图表。

提前致谢

加固您的架构可能是一项具有挑战性的任务,将您的服务分片到多个服务器上并过度设计您的架构以获得表面安全性可能会被证明是您最大的安全弱点。

但是,当您开始设计 IT 基础架构时会出现许多问题,这些问题无法在单个 SO 答案中得到解答(将尝试找到一些好的白皮书并将其附加)。

有几件事我会建议,这些建议有些固执己见,并以我自己的想法为依据。


您的问题

I would really like to know is there any other steps or layers I need to make this secure. Is storing everything in the cloud wise, or should I have some physical servers as well?

选择云。您不再需要将东西存储在物理服务器上,除非您的当前业务流程 运行ning 核心业务功能已经在本地物理机器上运行。

运行 物理服务器会增加您的系统管理要求,例如 HDD 加密和物理安全要求,这些可能会被错误配置或完全忽略。

Use SSL certificate on the server to ensure the traffic is secure.

这通常是一个明智的选择,我会选择顺子,"Yes";但是,您必须考虑上下文。如果您正在 运行 访问诸如博客网站或文档相关网站之类的网站,这些网站在任何时间点都不会通过 HTTP 传输任何敏感信息,那么为什么要使用 HTTPS? HTTPS 有它自己的开销,它很小,但它仍然存在。也就是说,如有疑问,请启用 HTTPS

Have a firewall set up between the server and client.

建议你也可以选择CloudFlare WAF这样的服务,不过我个人没用过

Have a separate sql db server.

是的,但不一定出于安全目的。数据库服务器和 Web 应用程序服务器有不同的硬件要求,同时优化两者不太可行。此外,将它们放在单独的盒子上会大大增加您的可扩展性,这将有利于长期 运行.

从安全的角度来看;这主要是 "If I have two boxes and the attacker compromises one [Web Application Server], he won't have access to the Database server" 的另一种错觉。

从远见来看,这似乎是事实,但很少见。破坏 Web 应用程序服务器仍然几乎可以保证游戏结束。我不会对此进行详细介绍(除非您特别要求我这样做),但是将这两种服务彼此分开放在各自的盒子中仍然是个好主意。

Have a separate db for my security model data.

我不确定我是否理解这一点,您指的到底是什么安全模型?请分享一两个图表(也许是 ERD),以便我们更好地理解。

Store my passwords in the database using a secure hashing function such as PBKDF2.

显然是;然而,我要说的是有争议的,可能会被一些人标记(这是一场激烈的辩论)——我建议使用 BCrypt 而不是 PKBDF2,因为 BCrypt 的计算速度较慢(导致破解速度较慢)。

参见 - https://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storage

Passwords generated using a salt which is stored in a different db to the passwords.

如果您使用 BCrypt,我不明白为什么需要这样做(我可能错了)。我在以下 Whosebug 答案中详细介绍了整个用户名和密码散列,我建议您阅读 -

Use cloud based infrastructure such as AWS to ensure that the system is easily scalable.

这完全取决于您的目标、预算和要求。我个人会选择 AWS,但是在做出决定之前,您应该阅读更多关于 Google Cloud Platform 等替代平台的信息。

最后的评论

你提到的所有事情都很重要,你甚至正在考虑它们是件好事(大多数人只是忽略这些问题或选择最受欢迎的答案)但是我还想指出一些额外的事情:

  • 内部服务 - 确保服务器上没有不需要的服务和进程 运行ning,尤其是在制作中。这些服务通常是 运行 其软件的旧版本(因为您不会管理它们),可以用作您的服务器被入侵的入口点。

  • 安全编码 - 这似乎是另一个无需思考的问题,但它仍然被忽视或未正确完成。调查您使用的框架、它们如何处理安全性以及它们是否真的安全。作为开发人员(而不是渗透测试人员),您应该 至少 使用自动 Web 应用程序扫描仪(例如 Acunetix)在每个之后进行 运行 安全测试推送构建以确保您没有引入任何明显的关键漏洞。

  • 限制曝光 - 与我的第一点有些吻合。确保服务只暴露给依赖于它们的其他服务,而不是其他任何东西。根据经验,将所有内容完全关闭,并在严格要求时逐渐打开。

我的最后几点可能过于宽泛。目的是在开发软件和基础架构时保持一定的理念,而不是在复选框上打勾的永久规则。

我可能错过了一些事情。如果需要,我会随着时间的推移相应地更新答案。 :-)