是否可以对此代码执行SQL注入攻击?

时间:2015-02-21 09:13:55

标签: php mysql security pdo sql-injection

function addUser($username, $first_name, $last_name, $email, $pw, $type) {
include $_SERVER['DOCUMENT_ROOT'] . '/connection_library/connection_library.php';
$insertRow = NULL;
$connection = connectUserLogfiles();
try {
    $sql = "INSERT INTO user_list (username, first_name, last_name, email, password, type) "
            . "VALUES (:username, :first_name, :last_name, :email, :pw, :type)";
    $stmt = $connection->prepare($sql);
    $stmt->bindParam(':username', $username, PDO::PARAM_STR);
    $stmt->bindParam(':first_name', $first_name, PDO::PARAM_STR);
    $stmt->bindParam(':last_name', $last_name, PDO::PARAM_STR);
    $stmt->bindParam(':email', $email, PDO::PARAM_STR);
    $stmt->bindParam(':pw', $pw, PDO::PARAM_STR);
    $stmt->bindParam(':type', $type, PDO::PARAM_STR);
    $worked = $stmt->execute();
    $stmt->rowCount();
    $stmt->closeCursor();
} catch (Exception $ex) {
    return FALSE;
}
return $worked;
}

我听说使用bindParam会阻止SQL注入攻击。这是真的?有没有办法对此代码执行SQL注入攻击?假设我没有对参数执行过滤或清理(除了使用强大的单向加密方案加密的密码),您将如何执行SQL注入攻击?

数据库是MySQL数据库,connectionUserLogfiles()函数中使用的用户只有SELECT,INSERT和UPDATE权限。

1 个答案:

答案 0 :(得分:0)

  

我听说使用bindParam可以防止SQL注入攻击。这是真的?

Yes,前提是您disable emulated prepares(默认情况下处于启用状态)并且您的数据库驱动程序不是愚蠢的。