Database design 如何加密数据库密码字段

Database design 如何加密数据库密码字段,database-design,encryption,passwords,security,Database Design,Encryption,Passwords,Security,我听说为了安全问题,建议在数据库中对密码字段进行加密 如果是我的网站,我只能访问数据库。根据我们的网站政策,我可以查看其他人的密码 这是否也适用于我的网站,或者这背后有其他安全原因。您应该始终散列密码。用户没有理由信任您,您也无法知道您的数据库是否已被破坏。对于这样一个问题,我只能假设你对网站安全有基本的了解。我们生活在这样一个时代,索尼、美国政府、银行等公司的数据库每周都会遭到黑客攻击。如果你认为你可以豁免,那么你应该在注册时发布,让你的用户知道你不关心他们的隐私 没有任何理由认为你应该能够读

我听说为了安全问题,建议在数据库中对密码字段进行加密

如果是我的网站,我只能访问数据库。根据我们的网站政策,我可以查看其他人的密码


这是否也适用于我的网站,或者这背后有其他安全原因。

您应该始终散列密码。用户没有理由信任您,您也无法知道您的数据库是否已被破坏。对于这样一个问题,我只能假设你对网站安全有基本的了解。我们生活在这样一个时代,索尼、美国政府、银行等公司的数据库每周都会遭到黑客攻击。如果你认为你可以豁免,那么你应该在注册时发布,让你的用户知道你不关心他们的隐私

没有任何理由认为你应该能够读取你的用户密码之一

要实现密码散列,您应该在注册期间获取密码,并在存储到数据库之前对其进行散列。然后,当用户登录时,您应该对密码进行散列,然后将散列与数据库中的散列进行比较。如果两者比较,则密码相同


另外,记住给密码加盐。这意味着,如果您有一个密码test并对其进行哈希,如果另一个站点上的用户有密码test,那么这两个哈希是相同的,他们可以根据以前的哈希计算出密码。Salting就像在散列之前向密码添加额外的数据,所以数据库中的测试实际上可能是test123,每当有人键入密码时,PHP会自动将123追加到密码中。通过这种方式,在将您的站点的哈希值与另一个站点的哈希值进行比较时,相同密码的哈希值并不相同

您应该始终散列密码。用户没有理由信任您,您也无法知道您的数据库是否已被破坏。对于这样一个问题,我只能假设你对网站安全有基本的了解。我们生活在这样一个时代,索尼、美国政府、银行等公司的数据库每周都会遭到黑客攻击。如果你认为你可以豁免,那么你应该在注册时发布,让你的用户知道你不关心他们的隐私

没有任何理由认为你应该能够读取你的用户密码之一

要实现密码散列,您应该在注册期间获取密码,并在存储到数据库之前对其进行散列。然后,当用户登录时,您应该对密码进行散列,然后将散列与数据库中的散列进行比较。如果两者比较,则密码相同


另外,记住给密码加盐。这意味着,如果您有一个密码test并对其进行哈希,如果另一个站点上的用户有密码test,那么这两个哈希是相同的,他们可以根据以前的哈希计算出密码。Salting就像在散列之前向密码添加额外的数据,所以数据库中的测试实际上可能是test123,每当有人键入密码时,PHP会自动将123追加到密码中。通过这种方式,在将您的站点的哈希值与另一个站点的哈希值进行比较时,相同密码的哈希值并不相同

你的意思是你认为你是唯一可以访问它的人。安全性应该分层实现,所以如果一个失败了,后面总会有另一个


密码应该总是经过哈希和盐渍处理。

你的意思是你认为你是唯一可以访问它的人。安全性应该分层实现,所以如果一个失败了,后面总会有另一个

密码应该总是经过哈希和盐渍处理。

问题是,没有人——甚至用户自己——能够看到密码,并且密码不应该以允许检索的方式存储在数据库中。这是因为有很多方法可以使这些数据丢失——管理员可以打印一份报告,然后把它放在办公桌上;攻击者可以使用SQL注入来运行数据库查询;有人可能会闯入你的大楼偷走一盘备份磁带

许多客户在多个站点上使用相同的密码-因此,如果您的站点是最薄弱的环节,那么如果他们重复使用密码,您可能会使他们在其他站点上面临风险

建议使用一种称为哈希(hashing)的加密技术,它将明文密码转换成无意义的字符串;没有办法逆转散列,这意味着即使我偷了散列密码,我也无法确定原始的纯文本是什么

对同一字符串进行两次哈希运算会得到相同的哈希值——因此,当有人登录时,可以对其明文密码进行哈希运算,并将其与数据库中的哈希值进行比较

OWASP链接提供了有关此主题的更多信息,包括添加哈希

问题是什么 任何人——甚至用户自己——都不应该看到密码,而且密码不应该以允许检索的方式存储在数据库中。这是因为有很多方法可以使这些数据丢失——管理员可以打印一份报告,然后把它放在办公桌上;攻击者可以使用SQL注入来运行数据库查询;有人可能会闯入你的大楼偷走一盘备份磁带

许多客户在多个站点上使用相同的密码-因此,如果您的站点是最薄弱的环节,那么如果他们重复使用密码,您可能会使他们在其他站点上面临风险

建议使用一种称为哈希(hashing)的加密技术,它将明文密码转换成无意义的字符串;没有办法逆转散列,这意味着即使我偷了散列密码,我也无法确定原始的纯文本是什么

对同一字符串进行两次哈希运算会得到相同的哈希值——因此,当有人登录时,可以对其明文密码进行哈希运算,并将其与数据库中的哈希值进行比较


OWASP链接提供了有关此主题的更多信息,包括添加哈希

您不应该在数据库中存储任何密码,无论是加密还是其他方式

相反,存储一个散列。当用户尝试登录时,计算用户输入的密码的哈希值,并将其与存储在数据库中的哈希值进行比较

不幸的是,普通哈希容易受到所谓的彩虹攻击。如果攻击者掌握了您的表,她可以预先计算整个English1字典的哈希值,甚至是特定长度的所有字符组合的哈希值,生成所谓的rainbow表,然后快速将其与数据库表进行比较以查找匹配的哈希值。您的一些用户一定会使用弱密码,在这种攻击下可能会失败

为了防止彩虹攻击,不要散列密码本身。相反,hash密码+salt。salt是一个随机的、特定于用户的字符串,不需要比hash本身更保密。这引入了散列的变化,因此攻击者不能再对所有用户使用相同的彩虹表。实际上,攻击者必须为每个用户和他/她的盐生成一个新的彩虹表,希望这会让它变得非常昂贵

缺乏盐分导致了今年LinkedIn的大规模安全漏洞。引自:

安全专家说,加密密码是安全101——LinkedIn、eHarmony和Lastfm.com都没有采取的一个基本步骤

当然,这应该只是多层防御的最后一层,该层旨在让攻击者在已经读取您的数据库后更加难以生存。首先,您应该尽全力防止这种情况发生,包括防止SQL注入、严格分层、适当的数据库安全性、防火墙、定期修补等

1或其他感兴趣的人类语言


但是,理想情况下,应该单独存储在定义良好的Web服务API后面。

您不应该在数据库中存储任何密码,无论是加密的还是其他的

相反,存储一个散列。当用户尝试登录时,计算用户输入的密码的哈希值,并将其与存储在数据库中的哈希值进行比较

不幸的是,普通哈希容易受到所谓的彩虹攻击。如果攻击者掌握了您的表,她可以预先计算整个English1字典的哈希值,甚至是特定长度的所有字符组合的哈希值,生成所谓的rainbow表,然后快速将其与数据库表进行比较以查找匹配的哈希值。您的一些用户一定会使用弱密码,在这种攻击下可能会失败

为了防止彩虹攻击,不要散列密码本身。相反,hash密码+salt。salt是一个随机的、特定于用户的字符串,不需要比hash本身更保密。这引入了散列的变化,因此攻击者不能再对所有用户使用相同的彩虹表。实际上,攻击者必须为每个用户和他/她的盐生成一个新的彩虹表,希望这会让它变得非常昂贵

缺乏盐分导致了今年LinkedIn的大规模安全漏洞。引自:

安全专家说,加密密码是安全101——LinkedIn、eHarmony和Lastfm.com都没有采取的一个基本步骤

当然,这应该只是多层防御的最后一层,该层旨在让攻击者在已经读取您的数据库后更加难以生存。首先,您应该尽全力防止这种情况发生,包括防止SQL注入、严格分层、适当的数据库安全性、防火墙、定期修补等

1或其他感兴趣的人类语言

2但是
理想情况下,应该单独存储在一个定义良好的Web服务API后面。

我想在已经提供的好答案中添加一点。散列算法应该很慢,否则很容易在找到匹配项之前使用暴力。一个现成的GPU可以计算大约8G的组合,所以你可以在不到一毫秒的时间内尝试一本完整的英语词典


这就是为什么你应该使用Bcrypt来散列你的密码,它是专门为散列密码而设计的。它有一个成本因素,允许适应未来,因此更快的硬件。

我想在已经提供的好答案上补充一点。散列算法应该很慢,否则很容易在找到匹配项之前使用暴力。一个现成的GPU可以计算大约8G的组合,所以你可以在不到一毫秒的时间内尝试一本完整的英语词典



这就是为什么你应该使用Bcrypt来散列你的密码,它是专门为散列密码而设计的。它有一个成本因素,可以适应未来,因此更快的硬件。

我不是说我读了他们的密码。在我说的网站上,表单也在那里,管理员可以查看用户密码。我是管理员,了解用户密码与在数据库中查看密码是一样的。所以我很担心是否还有其他原因。我还想知道它是如何容易被黑客攻击的。除非我的数据库不在我的控制范围内。我知道任何人的网站都可能被黑客攻击。这是谁在做的问题。我明白你的意思,但这真的是一种糟糕的做法。没有理由任何管理员应该知道用户密码。管理员应该能够更改密码,但他们不需要知道旧的密码就可以做到这一点。我是在经过大量开发人员的工作后管理这个网站的。过去没有对实现进行控制。只是有一点-但不要加密密码,因为加密可以反转。散列密码。还有,看看出问题时会发生什么,谷歌的索尼或LinkedIn密码曝光。我并不是说我读了他们的密码。在我所说的网站上,管理员也可以在那里查看用户密码。我作为管理员,了解用户密码与在数据库中查看用户密码是同一回事。所以我担心是否还有更多的理由这样做这个。我还想知道它是如何容易被黑客攻击的。除非我的数据库不在我的控制范围内。我知道任何人的网站都可能被黑客攻击。这是谁在做的问题。我明白你的意思,但这真的是一种糟糕的做法。没有理由任何管理员应该知道用户密码。管理员应该能够更改密码,但他们不需要知道旧的密码就可以做到这一点。我是在经过大量开发人员的工作后管理这个网站的。过去没有对实现进行控制。只是有一点-但不要加密密码,因为加密可以反转。散列密码。另外,为了了解出现问题时会发生什么,谷歌将对索尼或LinkedIn的密码进行曝光。让我举一个真实世界的例子来说明这一点。我的手机提供商T-Mobile有一个在线站点,可以管理/购买部件/向您的帐户添加线路。我忘记了我的密码,按下忘记密码按钮,他们立即通过短信将我的明文密码发送到我的手机,而没有发出警告。我的手机放在我的办公桌上,有5-6个同事在旁边,我的密码在我的手机LCD上闪烁了几分钟,然后我才能回到办公室。给我发短信只是冰山一角,明文存储让我很生气。让我给你一个真实世界的例子来强调这一点。我的手机提供商T-Mobile有一个在线站点,可以管理/购买部件/向您的帐户添加线路。我忘记了我的密码,按下忘记密码按钮,他们立即通过短信将我的明文密码发送到我的手机,而没有发出警告。我的手机放在我的办公桌上,有5-6个同事在旁边,我的密码在我的手机LCD上闪烁了几分钟,然后我才能回到办公室。给我发短信只是冰山一角,明文存储让我很生气。你公司的股票名称是什么?不用担心。知道了这一点后,你不会感兴趣的。Salt+Hash,不要加密。你公司的股票名称是什么?不用担心。知道了这一点后,你不会感兴趣的。Salt+Hash,不要加密。它可能而且通常确实落入坏人之手。