Лучший способ избежать массива данных по запросу MysQl nodeJS - PullRequest
0 голосов
/ 19 октября 2018

Итак, у меня есть следующий объект, созданный по данным, предоставленным пользователем для регистрации:

  var dataToInsert = { 
  userName: 'Wilson J',
  userEmail: 'WilsonJ@gmail.com',
  userAddress: '2020 St.',
  userCellPhone: '95587412',
  }

И я использую следующий запрос для его вставки:

 var insertQuery = `INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES( '${Object.values(dataToInsert).join("','")}' )`;

Что в конце принимается как:

INSERT INTO
  users (
    userName,
    userEmail,
    userAddress,
    userCellPhone
  )
VALUES
  (
    'Wilson J',
    'WilsonJ@gmail.com',
    '2020 St',
    95587412
  )

Пока мне трудно понять, как работает экранирование данных.Я был бы очень признателен, если бы кто-нибудь мог показать мне, как SQL-инъекция может происходить с этим кодом и как его предотвратить.

Я использую модуль MysQl npm, и у него есть этот метод: mysql.escape(), ноЯ хотел бы найти более автоматизированный подход вместо того, чтобы избегать каждого отдельного значения вручную.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

В наше время активно не рекомендуется делать что-либо кроме привязки переменных к вашему запросу.См. this для получения дополнительной информации о других способах экранирования данных:

connection.query(`
    INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`, 
    Object.values(dataToInsert),
    function (error, results, fields) {
      if (error) throw error;
      // ...
    }
);

Предостережение : вы не сможете связать переменные с именами столбцов, поэтомук сожалению, эта часть запроса необходима.Убедитесь, что ваши ключи dataToInsert либо статичны, либо не введены пользователем.

0 голосов
/ 19 октября 2018

В качестве альтернативы вы можете использовать?символы в качестве заполнителей для значений, которые вы хотели бы экранировать следующим образом: [...]

Есть способ.https://github.com/mysqljs/mysql#user-content-escaping-query-values

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...