我想了解一下如何最好地建立一个安全性最重要的客户端服务器架构。
到目前为止,我有以下内容,我希望有人可以告诉我它是否足够好,或者还有其他我需要考虑的事情。或者,如果我有错误的结束,需要重新考虑事情。
在服务器上使用SSL证书以确保流量安全。
在服务器和客户端之间设置防火墙。
有一个单独的sql db服务器。
为我的安全模型数据设置单独的数据库。
使用安全散列函数(如PBKDF2)将我的密码存储在数据库中。
使用盐生成的密码,该密码存储在与密码不同的数据库中。
使用基于云的基础架构(如AWS)来确保系统易于扩展。
我真的很想知道是否还需要其他任何步骤或层来保证安全。是将所有内容存储在云端,还是应该有一些物理服务器?
我试过寻找一些可以帮助我理解的图表,但我找不到任何合适的图表。
提前致谢
答案 0 :(得分:1)
强化您的架构可能是一项具有挑战性的任务,并且跨多个服务器分割您的服务并过度设计您的架构以实现相似性安全性可能是您最大的安全漏洞。
但是,当您设计IT基础架构时,会出现一些问题,这些问题无法在单个SO答案中得到解答(将尝试查找一些好的白皮书并附加它们)。
有一些我会建议的东西,有点自以为是支持我自己的想法。
我真的很想知道是否还需要其他任何步骤或层来保证安全。是将所有内容存储在云端,还是应该有一些物理服务器?
解决云计算问题。您不需要再将物品存储在物理服务器上,除非您当前的业务流程正在运行已在本地物理机上运行的核心业务功能。
运行物理服务器会增加系统管理要求,例如硬盘加密和可能配置错误或完全忽略的物理安全要求。
在服务器上使用SSL证书以确保流量安全。
这通常是不费脑子的,我会选择直接的,"是&#34 ;;但是你必须考虑到背景。如果您运行的博客网站或与文档相关的网站在HTTP
之后的任何时间点都没有传输任何敏感信息,那么为什么要使用HTTPS
? HTTPS有它自己的开销,它很小,但它仍然存在。也就是说,如果有疑问,请启用HTTPS 。
在服务器和客户端之间设置防火墙。
建议您也可以选择CloudFlare WAF之类的服务,但我个人并未使用过它。
拥有一个单独的sql db服务器。
是的,但不一定是出于安全目的。数据库服务器和Web应用程序服务器具有不同的硬件要求,同时优化两者并不是很可行。此外,将它们放在不同的盒子上可以提高你的可扩展性,从长远来看这将是有益的。
从安全角度来看;它主要是另一种错觉,如果我有两个盒子并且攻击者破坏了一个[Web应用程序服务器],他就无法访问数据库服务器"。
有远见,这似乎是这种情况,但很少如此。对Web应用程序服务器的妥协仍然几乎可以保证游戏结束。我不会详细介绍这一点(除非你特别要求我),但是在自己的方框中将两个服务彼此分开仍然是一个好主意。
为我的安全模型数据提供单独的数据库。
我不确定我是否理解这一点,您指的是什么安全模型?小心分享一两个图表(可能是ERD),这样我们就可以更好地理解。
使用安全散列函数(如PBKDF2)将我的密码存储在数据库中。
明显是的;然而,我要说的是有争议的,可能会被某些人标记(这有点热议) - 我建议使用BCrypt
代替PKBDF2
,因为BCrypt较慢计算(导致更慢的破解)。
使用盐生成的密码,该密码存储在与密码不同的数据库中。
如果你使用BCrypt我不明白为什么这是必需的(我可能是错的)。我将在下面的StackOverflow答案中详细介绍有关整个用户名和密码的详细信息,我建议您阅读 - Back end password encryption vs hashing
使用基于云的基础架构(例如AWS)来确保系统易于扩展。
这完全取决于您的目标,预算和要求。我个人会去参加AWS,但在做出决定之前,您应该阅读更多关于Google Cloud Platform等替代平台的内容。
你提到的所有事情都很重要,你甚至考虑它们很好(大多数人只是忽略这些问题或者使用最流行的答案)但是我想指出一些额外的事情。 :
内部服务 - 确保服务器上没有运行任何不需要的服务和进程,尤其是在生产中。这些服务通常会运行旧版本的软件(因为您不会管理它们),这些服务可能会被用作服务器入口点的入侵点。
代码安全 - 这可能看起来像另一个简单但仍然被忽视或未正确完成。调查您正在使用的框架,它们如何处理安全性以及它们是否真正安全。作为开发人员(而不是笔式测试人员),您应该至少使用自动Web应用程序扫描程序(例如Acunetix)在每次构建之后运行安全测试,以确保你还没有引入任何明显的关键漏洞。
限制曝光 - 与我的第一点有点牵强。确保服务仅暴露给依赖于它们的其他服务,而不是其他任何服务。根据经验,一切都完全关闭,严格要求时逐渐打开。
我的最后几点可能会如此广泛。目的是在开发软件和基础设施时保持一定的理念,而不是在复选框上打勾的永久规则。
可能有一些我错过的东西。如果需要,我会相应地更新答案。 : - )