一尘不染

我应该mysql_real_escape_string在注册表中输入的密码吗?

mysql

当用户注册我 清洁 与密码mysql_real_escape_string如下

$password = clean($_POST['password']);

在将其添加到数据库之前,我使用:

$hashedpassword = sha1('abcdef'.$password);

并将其保存到mySQL中。

我的问题是我应该清理密码还是在将密码添加到数据库之前保护密码已被哈希处理?


阅读 266

收藏
2020-05-17

共1个答案

一尘不染

嗯,有一个主要的误解。

mysql_real_escape_string() 不会 清除 任何内容。 它与安全性完全无关。

此函数仅用于转义分隔符,仅此而已。它可以帮助您将字符串数据放入SQL查询-仅此而已。

因此,要查询的每个字符串(将其用引号引起来),都必须使用此函数进行准备。在所有其他情况下,这将毫无用处甚至有害。

因此,
出于这种误解,您在这里犯了两个主要错误:

  • 您正在使用此功能,而不使用实际要查询的数据
  • 您可以通过在密码上添加一些符号来破坏密码,因此该密码将无法使用

另外,请注意,此功能应始终与mysql_set_charset结合使用,否则"_real_"此功能的一部分将变得无用

2020-05-17