当输入被视为字符串并进行哈希处理时,我看不到需要。不会有效地散列它,以及消毒输入吗?这似乎浪费了大约几百个CPU周期,并不重要,但我没有看到需要。
我意识到我需要使用crypt来保护我的密码。
编辑:举个例子:
$password = $_POST['password'];
$password = strip_tags($password);
$password = sha1($password);
对我来说毫无意义。
答案 0 :(得分:4)
The Internet is full of chimpanzees
这就是为什么总是被提及的主要原因 在这些教程中,只使用了原始的PHP甚至没有抽象的格式,它确实是多余的。
但实际上,在实际应用mysql_real_escape_string
或等效中应用。不是前面提到的教程中描述的方式,但无论如何。
在设计合理的应用程序中,数据库层必须与其他逻辑分开。并且在查询执行时它必须完全不知道数据源或性质。意味着必须以相同的方式处理所有数据。即字符串必须引用和转义。
因此,您的密码必须发送到数据库层,并在那里作为常规字符串处理。并且,取决于图层体系结构,它可以被转义和引用,或作为与查询分离的参数发送,或以某种方式编码 - 但这根本不应该是我们关心的。
不会有效地散列它,嗯,消毒输入?
注意强调的词。
您错误解释mysql_real_escape_string
或类似功能的目的而产生的特殊困惑。事实上,它确实没有消毒。它真正做的是所需格式的一部分。放入SQL查询的字符串必须正确格式化。总是。尽管有源,内容或星座的插入。
毕竟,一些散列函数可能会返回二进制字符串,几乎可以包含一个特殊字符。但又一次 - 为什么要打扰呢?这些CPU周期不值得整体理智和应用程序安全性的一小部分。