我应该在将用户密码存储到数据库之前过滤它吗?

时间:2017-02-16 09:30:36

标签: database security passwords

建议永远不要信任用户并在将所有输入存储到数据库之前对其进行过滤,以避免sql注入等。

用户密码怎么样?我应该在存储之前进行任何消毒吗?如果我这样做,用户输入密码进行登录可能与已清理的版本不匹配。

(密码在存储前已加密)。

最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

  

建议永远不要信任用户并在将所有输入存储到数据库之前对其进行过滤,以避免sql注入等。

不,一点也不。建议通过使用预准备语句来避免SQL注入,并通过在显示数据时正确转义特殊字符来避免HTML /脚本注入。

  

我应该在存储之前进行任何消毒吗

不,你不应该。而且你也不应该加密密码。您应该使用像Bcrypt这样的强大加密算法对它们进行加盐和散列。

答案 1 :(得分:0)

  

我应该在存储它们之前进行任何类型的消毒......

除了JB Nizet关于存储的答案之外,在接受存储之前对其进行过滤。考虑一下, Password1 符合NIST安全要求,但它也在[几乎?]每个攻击者的前N个密码列表中。显然,您不希望攻击者能够使用他们最喜欢的密​​码列表。

列表本身可能相当大。我看过10,000,10000和1000万的尺寸。可以使用Bloom过滤器将列表压缩到20KB或40KB。然后,当用户选择密码时,请根据过滤器检查候选密码。 Bloom过滤器会产生一些误报,但这没关系。只需要求用户选择其他密码即可。

这是一个包含10,000个密码列表的GitHub:noloader/Password-Lists。另一个列表可在danielmiessler/SecLists获得。另见Peter Gutmann的Engineering Security, Chapter 6: Passwords