[英]Cross-Platform encryption for Database
假设我有一个MySQL数据库,用户可以在其中通过php网站输入一些个人数据,例如邮政地址。 用户无法登录该站点以以后验证他们输入的内容。 他们为其输入数据的企业(当然是自愿的)然后可以使用该数据向用户发送实际的邮件(您知道,邮政服务等)或电子邮件(当然,用户事先同意他们要接收电子邮件) 。 数据库仅用作数据存储,我希望它有点安全。 如果有人闯入数据库,则检索电子邮件地址以及实际的名字和姓氏(无论如何,许多电子邮件地址都包含两者)可能不会造成太大的伤害,但是知道人们的住处可能是一件大事。
企业正在通过C#前端访问数据库,该前端将数据库中的存储过程作为目标来处理事务,包括根据用户的电子邮件地址搜索用户。
通过搜索收集的信息,我可以想到以下过程以更安全的方式处理个人数据(比将它们另存为数据库中的纯文本)
我的思路是:这些不是存储的密码,因此我不需要所有密码哈希技巧(据我所知,在将密码安全地保存在数据库中时,您使用的是单向算法,因此永远直接从数据库对密码进行反向工程,但必须对想要尝试的每个密码进行哈希处理,并根据所需的数据库条目对其进行测试,以查看是否选择了正确的密码),但是可以选择简单的加密/解密,因为我不会希望将每个地址都强行从数据库中删除。
有一些粗糙的地方让我感到担忧:
总而言之,与我必须在我的php文件以及前端代码中采取的措施相比,我认为安全性提升是微不足道的。 可以感觉到的安全收益可能更大(“哇!他们正在加密加密保存我们的数据!他们肯定知道自己在做什么!”)。 对某些类型的用户具有严格和限制性的特权(例如,撤消“ SELECT”命令)应该更有用,不是吗?
为@Luke Joshua Park编辑:
感谢您的详细回答。 我想API服务器是指我的php驻留在Web服务器上吗? 这确实应该与数据库服务器分开。 两台服务器都托管在大学的网络中,但可以从Internet访问。
我可以遵循身份验证的路径,以至于企业中的每个用户(在所说的大学里项目不多,也许是措辞上的错误选择)都拥有一个数据库用户,并且该用户具有合理的设置权限。 但是从外部使用php的用户仅发送要存储在数据库中的数据(理想情况下,将使用一个普通但独立的数据库用户,并为其设置了相应的授权),并且永远不会获取(自己的)数据。 使用身份验证意味着他们首先必须创建一个帐户(不需要),并且他们如何对自己进行身份验证以创建不需要的帐户?
在实施解决方案之前 ,您最好问这些问题,加密很难正确进行,并且在开始之前需要有充分的了解。
我将首先快速回答您的问题,但更重要的部分是后续内容。
在大多数情况下,您所提出的问题是无关紧要的。 信不信由你,您的问题更多的是与身份验证有关,而不是与加密有关。
您需要了解的第一件事是服务器违规就是服务器违规。 不管您使用多少加密技术,坏东西都会发生。 但是我们会尽可能减少损害。
您的数据库软件应该在与API服务器不同的服务器/实例/上运行。 加密/解密只能在您的API服务器上进行。 这样的好处是您的API服务器和数据库服务器都必须被破坏才能解密数据(访问密钥)。 如果密钥不在您的webroot或类似的东西中,那么如何将密钥存储在API服务器上并不重要。
过去的一切都是验证。 您需要一个强大的身份验证系统来确定谁可以向您发送信息以及谁可以从您那里检索信息。 与API服务器之间的通讯显然应该始终使用TLS加密。 您可能会考虑使用TLS客户端身份验证 ,以确保从您那里请求数据的实体就是他们所说的身份。 通常,客户端身份验证不能真正在Web上使用,但是如果您以更私密的方式与“企业”进行交互,则客户端身份验证是一个不错的选择。
综上所述:
将您的API服务器与数据库服务器分开。 加密密钥仅应位于API服务器上。 请参阅此存储库 ,以获取从PHP到几乎所有其他语言的加密示例的集合。
将TLS用于所有传入和传出通信。
专注于身份验证。 TLS客户端身份验证是一个不错的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.