Должны ли мы создавать запросы Мангуста на интерфейсе или бэкэнде?

#javascript #express #mongoose #xmlhttprequest

Вопрос:

Мы можем создавать сложные запросы с помощью Мангуста с такими опциями, как $lte , $gt , $ne и так далее… но мне интересно, где/как мы должны создавать эти запросы?

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

 {
  date: {
    $gt: "01/01/2021",
    $lte: "31/01/2021"
  }
}
 

Но является ли это хорошей практикой? Если нет, то в каком формате я должен отправить это и как я могу преобразовать его в запрос Мангуста?

Комментарии:

1. Вы не хотите раскрывать детали внутренней реализации во внешнем интерфейсе. С точки зрения безопасности вы показываете, что используете Mongo в качестве уровня сохраняемости, который потенциально может позволить атаке попытаться использовать. Во — вторых, вы не хотите отделять свой уровень пользовательского интерфейса от реализации BE, что означает, что произойдет, если вы замените Mongo на другую базу данных NoSQL-вам придется обновить код пользовательского интерфейса, чтобы теперь он соответствовал этой структуре запроса.

Ответ №1:

предполагая, что вы отправляете это в теле запроса, то это не так, как вы должны это делать, это может выявить недостаток безопасности в том, что ваши злоумышленники могут сами писать запросы и извлекать конфиденциальную информацию, видя, что ваш сервер выполнит ЛЮБОЙ запрос, который потенциально может быть использован для раскрытия конфиденциальной информации.

База данных-это то, с чем должен работать сервер, а не интерфейс, не заставляйте интерфейс писать запросы. Вместо этого просто отправьте мне вот такое:

 {
  "startDate": "1/1/1",
  "endDate": "2/2/2" 
}
 

Затем на своем бэкэнде вы можете получить значения из тела запроса и сделать это самостоятельно

 {
  date: {
    $gt: startDate,
    $lte: endDate
  }
}
 

Комментарии:

1. Вот что я подумал. Поэтому, если мне нужно создать сложный запрос, который использует множество этих операций, я должен разделить данные в интерфейсе и собрать их обратно в бэкэнд.