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