【问题标题】:Is there any need to escape password inputs when using !password_verify? [duplicate]使用 !password_verify 时是否需要转义密码输入? [复制]
【发布时间】:2016-08-16 01:03:47
【问题描述】:

目前我得到了这个:

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

然后我用这个检查密码:

$password_q = mysql_query ("SELECT password FROM ppl WHERE email='$email'"); 
            $password_result = mysql_result ($password_q, 0);
            if (!password_verify($password, $password_result)) {
            $error = 'Wrong password.'; } else {

这里是否需要使用 mysql_real_escape_string 或者我应该删除它? 这是代码中唯一使用 $password 变量的地方。

我应该提到我一直坚持使用旧的 MySQL API。

【问题讨论】:

  • 还记得您的其他问题中的this comment 吗? ;-) 答:。不要。
  • 就个人而言,看到到目前为止给出的 2 个答案,请不要解释为什么不应该这样做。这个问答是stackoverflow.com/questions/36628418/cleansing-user-passwords,可能是重复的。哦,不客气。
  • 例如。如果您的密码包含$ 符号,则其后面的所有内容都将被忽略/丢弃。
  • 不过我很好奇。您在另一个问题中说您一直坚持使用 MySQL_ API。 password_verify() 与 PHP 5.5 一起使用,那么为什么不使用 MySQLi_ 或 PDO API?这样,您就可以使用准备好的语句。
  • 嗯,好的。好吧,你不能在同一次运行中混合使用这些 API,不。编辑:@JayBlanchard 刚刚给了你一个更好的解释。 ;-) 例如:您不能使用 PDO 连接中的连接变量连接 PDO API 并使用 MySQL_ 进行查询。在 Stack stackoverflow.com/questions/17498216/… 上咨询以下内容

标签: php mysql login


【解决方案1】:

没有必要,因为您(希望)没有将密码传递给您的 MySQL 请求,因为 mysql_real_escape_string 用于转义 SQL 请求参数中的特殊字符。

mysql_real_escape_string — 转义字符串中的特殊字符以用于 SQL 语句

【讨论】:

  • 如果你记得或看过这个人的其他问题,你就会知道他一直在使用 MySQL_ API ;-)
  • “没有必要,因为您(希望)没有将密码传递给您的 MySQL 请求。” - 这不包括“为什么”的事实他们不应该。
【解决方案2】:

您不需要转义它,因为密码不是通过 MySQL 传递的。

转义用于防止 SQL 注入。不会有 SQL 注入,因为它是在查询之前完成的。

mysqli_real_escape_string()

此函数用于创建一个合法的 SQL 字符串,您可以在 SQL 语句中使用它。考虑到连接的当前字符集,将给定的字符串编码为转义的 SQL 字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 2018-03-12
    • 2010-10-11
    • 2018-09-06
    • 2019-11-28
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多