Как избежать слепой (спящей) инъекции Mongo DB NoSQL
При сканировании моего приложения на наличие уязвимостей я обнаружил одну ошибку высокого риска, т.е.
Слепое внедрение MongoDB NoSQL
Я проверил, какой именно запрос отправляется в базу данных с помощью инструмента, который выполнял сканирование и обнаружил при запросе вызова GET, он добавил строку ниже в запрос GET.
{"$where":"sleep(181000);return 1;"}
При сканировании получен ответ "Тайм-аут", который означает, что введенная команда "Сон" выполнена успешно.
Мне нужна помощь, чтобы исправить эту уязвимость. Может кто-нибудь помочь мне здесь? Я просто хотел понять, что мне нужно добавить в свой код, чтобы выполнить эту проверку перед подключением к базе данных?
Спасибо, Аншу
1 ответ
Подобно внедрению SQL или любому другому типу внедрения кода, не копируйте ненадежный контент в строку, которая будет выполняться как запрос MongoDB.
Очевидно, в вашем приложении есть код, который наивно принимает вводимые пользователем данные или какой-либо другой контент и запускает его как запрос MongoDB.
Извините, сложно дать более конкретный ответ, потому что вы не показали этот код или не описали, что вы намеревались сделать.
Но, как правило, в каждом месте, где вы используете внешний контент, вы должны представить, как его можно использовать не по назначению, если контент не содержит формат, который вы предполагаете.
Вместо этого вы должны проверить контент, чтобы он мог быть только в том формате, который вы намереваетесь, или отклонить контент, если он не в допустимом формате.