【问题标题】:Is it necessary to escape parameters for stored procedures?存储过程是否需要转义参数?
【发布时间】:2011-01-25 13:45:39
【问题描述】:

或者在这种情况下不需要调用 real_escape_string()?
/Email 值来自用户输入。/

function findUser($email)  
{   
    $mysqli = connectDB();  
    $email = $mysqli->real_escape_string($email);  
    $query = "CALL FindUser('{$email}')";  
    // ...  
}  

【问题讨论】:

    标签: php mysql stored-procedures mysqli escaping


    【解决方案1】:

    您只是在构建一个动态 SQL 字符串,其中包含一个可能会受到攻击的过程调用。您应该将参数绑定到该过程,这样可以为您提供一些保护,只要您不在该过程中使用动态 SQL。

    mysqli_stmt::bind_param

    Bound Parameters

    【讨论】:

      【解决方案2】:

      是的,您仍然需要对其进行转义,存储过程与常规查询一样易受攻击。

      【讨论】:

      • 我以为存储过程的参数会被数据库自动转义。
      • 您可以使用可以声明其类型的数字,但仍然可以注入电子邮件等字符串。考虑他们是否将以下内容作为电子邮件发送:email@email.com');DROP TABLE USERS;您可能正在考虑参数绑定,就像 KM 所说的那样。这确实是最安全的方法。无需担心您是否在某个地方错过了 mysql_real_escape_string 调用。
      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多