SQL查询中哈希密码字段是否需要参数化调用/清除/转义字符?

SQL查询中哈希密码字段是否需要参数化调用/清除/转义字符?,sql,passwords,sql-injection,Sql,Passwords,Sql Injection,在为网站编写登录系统时,标准的做法是使用参数化调用、清理用户输入和/或转义特殊字符的组合来防止SQL注入攻击 然而,任何好的登录系统在进入SQL查询之前都应该对每个密码进行散列(可能是salt),所以仍然需要担心密码中的SQL注入攻击吗?散列本身难道不能完全消除SQL注入攻击的可能性吗 编辑:我还想知道,当前的网站是否确实清理了密码字段,或者是否通常不担心密码字段。最好假设对数据库的任何调用都可以进行查询注入 就我个人而言,我非常怀疑使用SHA1散列的调用是否能够注入代码,但有没有任何理由不进行

在为网站编写登录系统时,标准的做法是使用参数化调用、清理用户输入和/或转义特殊字符的组合来防止SQL注入攻击

然而,任何好的登录系统在进入SQL查询之前都应该对每个密码进行散列(可能是salt),所以仍然需要担心密码中的SQL注入攻击吗?散列本身难道不能完全消除SQL注入攻击的可能性吗


编辑:我还想知道,当前的网站是否确实清理了密码字段,或者是否通常不担心密码字段。

最好假设对数据库的任何调用都可以进行查询注入

就我个人而言,我非常怀疑使用SHA1散列的调用是否能够注入代码,但有没有任何理由不进行清理


处理注射时,偏执是最好的方法;)

最好假设对数据库的任何调用都可以进行查询注入

就我个人而言,我非常怀疑使用SHA1散列的调用是否能够注入代码,但有没有任何理由不进行清理

处理注射时,偏执是最好的方法;)

可能不会

但散列密码不就是数据库调用的另一个参数吗?你的意思是,除了使用字符串连接的密码外,你会对所有其他输入混合使用“n”匹配参数吗?

可能不会


但散列密码不就是数据库调用的另一个参数吗?你的意思是,除了使用字符串串接的密码外,你会对所有其他输入混合“n”匹配参数化吗?

取决于你正在执行的查询类型

如果您的查询看起来像

SELECT username from user_logins WHERE 
  username=? AND password_md5 = md5(?)
不在md5函数内转义指定的密码将导致sql注入漏洞

只要一直使用参数化查询,除非有非常好的理由(提示:(…)不能很好地处理它们)


参数化查询比转义更容易正确执行,而且更安全。

取决于您正在执行的查询类型

如果您的查询看起来像

SELECT username from user_logins WHERE 
  username=? AND password_md5 = md5(?)
不在md5函数内转义指定的密码将导致sql注入漏洞

只要一直使用参数化查询,除非有非常好的理由(提示:(…)不能很好地处理它们)


参数化查询比转义更容易正确执行,也更安全。

我想这更像是一个理论问题。当然,在现实中你只会使用参数化,但我很好奇一个散列密码是否会导致攻击。我想这更像是一个理论问题。当然,实际上你只会使用参数化,但我很好奇哈希密码是否会导致攻击。没错,但该示例要求你使用MySQL执行哈希,而不是使用PHP并将结果传递给MySQL。没错,但该示例要求你使用MySQL执行哈希,而不是使用PHP并将结果传递给MySQL。你的观点是错误的。总有一天会让你注射什么?我不太明白你的意思。你的观点错了。总有一天会让你注射什么?我不太明白你的意思。