我的网站上有一个表单,用于收集一些相当敏感的数据(个人识别数据)。我一直在这里阅读如何最好的保障,并有点不知所措的意见。首先,让我解释一下到目前为止我所做的事情:
到目前为止,数据作为纯文本存储在数据库中,这就是我想要更改的内容。我读到了MySQL内置的AES函数和BLOB,但我在这里读到很多人都反对它(尽管其他人认为它很好......)。我知道最终的方法可能是使用外部存储在别处的密钥,但我也尽量保持简单,同时保证足够安全。如果我采取其他措施来保护(如上所述)MySQL功能是否会给我一定程度的安全性?
此外,当用户提交表单时,他们会收到包含其数据的电子邮件。我确认电子邮件似乎有点安全,因为标题显示
Received: from myhost (myhost. [IP])
by mx.google.com with ESMTPS id
br2si8908071ojb.205.2015.04.22.08.36.02
for <someemail>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
无论如何,在我开始在数据库中实现某种安全存储之前,我很好奇你们所推荐的一种很好的实用方法。
答案 0 :(得分:1)
我认为很大程度上取决于您的用例。以后您需要对这些数据做什么?我肯定会在将数据插入数据库之前对其进行加密和加密,我会尽量确保您的应用程序的任何其他部分都不会被SQL注入轻易入侵(查找Joomla hacks,是否可能?)等等,我将审查管理员登录的方式,以确保它不能成为攻击的载体。
我看到一个更大的问题是发送这个&#34;敏感&#34;通过未加密的电子邮件发送数据可能只是为了消除所有其他保护它的尝试。我认为您显示的标题仅与您与SMTP服务器的连接有关,但此内容将永久留在Google的服务器上,它将被发送到可能不太安全的目标服务器,它可能会使用未加密的连接检索。
答案 1 :(得分:1)
有几件事。
首先,不要使用魔法引号;特别是如果您已经使用内置类转义值。这将导致潜在的双重转义输入,这很糟糕。此外,魔术引号通常不被认为是安全的(因为它们是魔术)。资料来源:http://php.net/manual/en/security.magicquotes.php。从手册:
"Warning This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0."
其次,您希望再次获得想要查看的数据。例如,名称,日期,信用卡号码。
你不想再看到什么,哈希。我的意思是,如果您只需要比较数据而不是像密码那样读取数据,请使用SHA256(或更好)来无条件地消除数据被反转的可能性。
关于salting(另一个答案提到),这指的是在加密或散列中添加随机字符串以避免称为彩虹表的攻击的做法。这个过程看起来像这样(伪代码)
var salt = "9285gh8927thg0nfc30897gnvh2087vgh 8g7v2n";
var data = "sensitive data";
var encrypted_data = encrypt(data + salt);
对于数据过滤,您不仅要处理SQL注入(尽管这是一个好的开始)。您还想看看XSS(OWASP:https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29)
另外,作为旁白;您应该拥有只有权执行某种操作的数据库用户(即:用户写入数据库,用户从数据库中读取)。
希望这有帮助!