我正在创建一个对用户数据进行编码的网站(例如用户名,电子邮件,电话号码等),以便他们的数据安全无虞。 为了防止数据泄露给公众,我先将其用SHA1编码,然后再将其存储到数据库中。我正在使用PHP处理请求。
提交表单并发送数据时,数据是否会被泄露或截获?例如,由NSA或攻击者。
如果是这样,我正考虑在提交表单之前使用JavaScript对数据进行编码。那会有用吗?
答案 0 :(得分:2)
我知道我不应该回答这个问题,因为这不是主题,但有些东西必须在这里清除:
在你的第一段中,你说我正在对输入的数据进行编码,我不知道你究竟是什么意思。
如果您的意思是加密,我不确定如果您使用它们进行身份验证,您如何加密电子邮件/用户名。
但一般来说,只要您使用带有强安全存储密钥的良好密码,加密数据就是一件好事,请检查Where to store a server-side encryption key?。
在将数据存储到数据库之前,您还说过使用sha1。这也不清楚,你用sha1散列所有数据吗?如果是这样。你怎么" unhash"您需要时的数据。
我认为你是哈希密码,但sha1和md5(两种常见的算法)不适合密码(或者@Peter说:不适合任何安全相关的)。
要哈希密码,您需要使用正确的算法,例如bcrypt,scrypt或者氩气。
在PHP中,散列密码的最佳方法是使用本机内置函数。 password_hash()
用于散列,password_verify()
用于验证散列。
这些函数在PHP 5.5或更高版本中可用,如果您使用旧版本 - 考虑更新 - 您可以使用ircmaxell的compatibility library。
在第2段中,您谈到了以“泄露”的形式提交的数据",我想您的意思是截获a.k.a.中间人攻击-MITM简称 - 。
要保护数据免受MITM攻击,您需要使用HTTPS而不是不安全的HTTP。 HTTPS加密服务器和客户端(浏览器/用户)之间发送的数据,这将阻止任何人拦截数据。 通常要获得HTTPS,您必须付费,但现在有一个免费的证书颁发机构-CA,简称为Let's Encrypt,提供免费证书。
您提到在提交表单之前使用JavaScript加密数据。 这不会起作用,因为当客户端连接到您的普通HTTP网站时,HTML / JavaScript是纯文本的并且可以更改,攻击者可以简单地拦截您的JavaScript代码(将加密数据的代码)并将其改为他想要的任何东西。
您应该考虑的唯一解决方案是为您的网站获取SSL证书。
我假设您正在谈论该机构进行的监控,这里有两件事:
MITM攻击我已在上面介绍过,使用HTTPS。
访问服务器上的数据。如果NSA以某种方式对您的数据感兴趣,并且您的服务器位于他们拥有管辖权的地方,他们只需访问您服务器中的未加密数据。
我发现你错过了使用这些术语,编码不是你想的那样。
编码只是将数据转换为特定格式(例如JSON)。
加密是指您使用算法和密钥将数据转换为无法读取的格式,加密可以保护数据免受未经授权的访问,加密数据可以解密到原来的状态。
哈希使用单向函数从给定数据生成值(称为哈希)。 这意味着,给定一个哈希,理论上你无法获得原始值。
这只是您问题的一般答案,而不是最终的安全指南(我不是安全专家!)
答案 1 :(得分:0)
您的问题的简单答案“表格中提交的数据是否安全?”为“是”和“否”。具体取决于您提交数据的方式。如果您使用的是诸如HTTP之类的明文协议,则它是不安全的。因为数据是以明文形式传输的,攻击者可以嗅探和读取数据。但是,如果您通过HTTPS提交数据,则是,您的数据已安全提交。
现在是数据存储部分。建议在将密码存储在数据库中之前使用强散列算法和salt对密码进行散列。您无需对电子邮件ID或用户名等数据进行哈希/编码。这可以存储为明文。
因此,简而言之,如果您在存储之前通过SSL提交数据并散列密码,则会在传输过程中加密数据并将其安全地存储在数据库中。这是行业标准,包括顶级安全公司在内的许多公司都遵循这一标准。