sql注入

camsedfj  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(421)

我正在使用node/javascript和mysql数据库开发api。我认为这是一个与node/javascript无关的问题,只是一个sql问题,但我对此不确定。
这里我有一个最小的例子。假设我有一个用于创建用户的存储过程:

DROP PROCEDURE IF EXISTS users_create;
CREATE PROCEDURE users_create(
  IN user JSON
)
BEGIN
  -- Retrieve values from JSON
  SET @name = JSON_EXTRACT(user, '$.name');
  SET @email = JSON_EXTRACT(user, '$.email');
  SET @password = JSON_EXTRACT(user, '$.password');
  SET @uuid = uuid();

  -- Insert new user
  INSERT INTO user (`id`, `name`, `email`, `password`) VALUES (
    @uuid,
    JSON_UNQUOTE(@name),
    JSON_UNQUOTE(@email),
    JSON_UNQUOTE(@password)
  );

  -- Retrieve created user
  SELECT `id`, `name`, `email`, `status`, `createdAt` FROM user
  WHERE id = @uuid;

END

现在我有了一个新的用户对象-javascript-:

const newUser = {
  name: "This is me",
  email: "me@example.com",
  password: "strong_password",
}

我称之为程序:

const createUserQuery = `CALL users_create('${JSON.stringify(newUser)}')`;

我的问题是:假设我使用json传递数据 JSON_EXTRACT 以及 JSON_UNQUOTE ,我是否倾向于sql注入?

kuuvgm7e

kuuvgm7e1#

不,您不倾向于sql注入。您可能对代码有其他问题。如果——比如说——密码没有加密,那么你的代码可能是不安全的。
但是,将运行的唯一sql代码是存储过程中的sql。
sql注入与动态sql相关联。这是由字符串构造的sql。sql注入帐户更改(“增强”?)字符串以执行危险的操作。您的代码只是在 insert . 这些可能是错误的,但它们不会导致任何其他语句运行。

相关问题