Php 散列输出对SQL查询是否有危险?

Php 散列输出对SQL查询是否有危险?,php,mysql,sql,security,hash,Php,Mysql,Sql,Security,Hash,在对密码进行散列和存储之前,在密码上使用stripslashes和mysql_real_escape_字符串有一个问题。在散列之前的剥离或转义是不必要的,因为特殊字符对散列函数没有意义 但是,某些散列结果是否可能创建危险的SQL查询 我意识到,如果有足够的散列和salt,那么故意发生这种情况的可能性很小,但是运行一个strip并根据散列结果逃逸是否仍然是一种好的做法?这样做会过于热情,而且没有必要。哈希函数不会输出任何可能引入SQL注入漏洞的引号。此外,您不应该同时使用stripslashes(

在对密码进行散列和存储之前,在密码上使用stripslashes和mysql_real_escape_字符串有一个问题。在散列之前的剥离或转义是不必要的,因为特殊字符对散列函数没有意义

但是,某些散列结果是否可能创建危险的SQL查询


我意识到,如果有足够的散列和salt,那么故意发生这种情况的可能性很小,但是运行一个strip并根据散列结果逃逸是否仍然是一种好的做法?

这样做会过于热情,而且没有必要。哈希函数不会输出任何可能引入SQL注入漏洞的引号。此外,您不应该同时使用
stripslashes()
mysql\u real\u escape\u string()
。只需使用mysql\u real\u escape\u string()

示例 我不是在纵容MD5的使用,而是在它的维基百科页面上:

MD5散列通常表示为32位十六进制数


十六进制数不应该对SQL注入造成问题,因为它们只是由
/[0-9a-f]/
组成。如果搜索正在使用的哈希函数,应该会找到类似的结果。你不需要清理散列。你应该安全

这样做既过分热情,也没有必要。哈希函数不会输出任何可能引入SQL注入漏洞的引号。此外,您不应该同时使用
stripslashes()
mysql\u real\u escape\u string()
。只需使用mysql\u real\u escape\u string()

示例 我不是在纵容MD5的使用,而是在它的维基百科页面上:

MD5散列通常表示为32位十六进制数


十六进制数不应该对SQL注入造成问题,因为它们只是由
/[0-9a-f]/
组成。如果搜索正在使用的哈希函数,应该会找到类似的结果。你不需要清理散列。你应该安全

哈希函数的结果是一个数字。据我所知,大多数(如果不是所有的话)php哈希函数都返回十六进制数。哈希函数不会产生不安全的字符串结果


但是,将所有输入到查询中的内容转义始终是一种好的做法,或者更好的做法是使用参数化查询。

哈希函数的结果是一个数字。据我所知,大多数(如果不是所有的话)php哈希函数都返回十六进制数。哈希函数不会产生不安全的字符串结果


但是,最好不要将所有输入到查询中的内容都转义,或者更好的做法是使用参数化查询。

除非您要维护某种需要在旧版本PHP上运行的遗留应用程序,否则您应该使用mysqli或PDO(带有其绑定语法)。然后这个问题就变得无关紧要了。@N回答说,我们使用什么并不总是由我们决定的。@Chris实际上有计划反对并最终停止旧的mysql扩展以支持mysqli,所以如果您正在制作新软件,您最好使用首选方法,并确保您的环境提供这种方法。@Chris确实如此。只要您意识到从技术角度来看,遗留mysql_*函数不是您应该使用的。希望决策者能尽快恢复理智。@Pelshoff目前正在进行更新旧代码库与开发新功能的斗争。除非您要维护某种需要在旧版本PHP上运行的遗留应用程序,否则您应该使用mysqli或PDO(具有约束性语法)。然后这个问题就变得无关紧要了。@N回答说,我们使用什么并不总是取决于我们。@Chris实际上有计划反对并最终停止旧的mysql扩展以支持mysqli,所以如果您正在制作新软件,您也可以使用首选方法,并确保您的环境提供这种方法。@Chris这是非常正确的。只要你意识到从技术角度来看,遗留的mysql_*函数不是你应该使用的。希望决策者能尽快恢复理智。@Pelshoff目前正在进行更新旧代码库与开发新功能的斗争。这并不完全正确。如果magic quotes是启用后,在GET/POST参数上使用
stripslashes
是一种很好的做法。但是,对于所有参数,这应该在脚本开头同时发生一次。@Niklas True。但是如果启用了魔引号,则需要找到新主机或更新PHP.ini(如果可以的话)。这并不完全正确。如果启用了magic quotes,则最好在GET/POST参数上使用
stripslashes
。但是,对于所有参数,这应该在脚本开头同时发生一次。@Niklas true。但是如果启用了magic quotes,则需要找到新主机或更新PHP.ini(如果可以的话).我确实错过了关于他们返还十六进制的部分,这将排除所有可能的特殊字符。谢谢。我确实错过了关于他们返还十六进制的部分,这将排除所有可能的特殊字符。谢谢。