Возврат неопределенного с req.query.ID и несколькими инструкциями sql в маршруте Node.js. - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь отобразить некоторую информацию, которую имею, используя вызов req.query.ID.Я думаю, что понимаю, почему он возвращается неопределенным, но я не знаю, верны ли мои предположения.Я могу получить желаемый результат, если я жестко закодирую значения в запросе, но не когда использую req.query.ID.

Это для школьного задания, так что инъекции sql и уязвимости - моя самая большая проблемапрямо сейчас.

app.post('/login', function(req, res) {


var sql = "Select * from UserInfo where UserEmail = '"+ req.body.UserEmailLogin +"'";
con.query(sql, function(error, results, fields){
  if(error){
    console.log(error);
  }

  console.log(results);
  res.redirect('profile?ID=' + results[0].UserID);
})
});


app.get('/profile', function(req, res){

  var sqlQuery = 'Select UserID, UserFirstName, UserLastName from UserInfo where UserID = ' + req.query.ID; +
  '  SELECT * FROM GroupCreate LEFT JOIN UserInfo ON UserInfo.UserID = GroupCreate.UserInfo_UserID LEFT JOIN GroupInfo ON GroupInfo.GroupID = GroupCreate.GroupInfo_GroupID Where UserInfo_UserID = ' + req.query.ID; +
  ' Select * from GroupInfo where GroupType = "Sports";'
  con.query(sqlQuery, function(error, results, fields){
    if(error) throw error;

    res.render('profile', {
      title: "Profile",
      results: results[0],
      results1: results[1],
      results2: results[2],
      Username: results[0].UserFirstName + " " + results[0].UserLastName
    });
    console.log(results[0]);
    console.log(results[1]);
    console.log(results[2]);
  });

});

Проблема не исчезнет, ​​если я жестко закодирую значение «1», где оба req.query.ID находятся в разделе app.get.

Параметр url в конечном итоге выглядит как http://localhost:3000/profile?ID=1, но результаты: результаты [1] и результаты: результаты: [2] возвращают неопределенное значение.

1 Ответ

0 голосов
/ 11 апреля 2019

Если внедрение SQL-кода вызывает у вас беспокойство, никогда не создавайте SQL-запрос, добавляя значения, вместо этого передавайте значения в формате параметров. Я предполагаю, что вы используете пакет MySQL.

connection.query('SELECT * FROM table WHERE id=?',[id], (err, results) => {
        // Do whatever you want to
    }
);

И я предполагаю, почему ваш res.redirect('profile?ID=' + results[0].UserID); не работает, потому что значение может быть небезопасным для URL (огромное предположение с моей стороны). Попробуйте и ответьте мне, если это не сработает.

res.redirect('profile?ID=' + encodeURIComponent(results[0].UserID));

См. encodeURIComponent ()

...