Email or username:

Password:

Forgot your password?
iliazeus

Если пишете код для работы с базами данных - пожалуйста, никогда не пытайтесь изобрести логику экранирования сами. Да даже JSON.stringify будет намного лучше костылей вроде `"` + key + `"`.

Я был удивлен, что это не везде считается частью best practice, которые не требуют какого-то доказательства или обсуждения на код-ревью.

3 comments
cauf 🇷🇺

@iliazeus Вообще с запросами спорный вещи лучше в параметры пихнуть и пусть драйвер подключения сам разбирается, как это корректно передать в бд.

iliazeus

@cauf в конкретно моем случае там составлялся JSONPath для запроса в Redis. Составлялся примерно как `$.["${key}"]`

Он весь, насколько я понял, экранируется драйвером как единое целое, но этого все равно достаточно для инъекции на уровне самого JSONPath.

И когда я предложил заметить это на `$.[${JSON.stringify(key)}]`, меня спросили "а зачем?". Это при том, что есть несколько путей в коде, где этот key передается в запросе пользователем.

cauf 🇷🇺

@iliazeus ну вообще true-path валидировать ввод пользователя на входе, а не при передаче в запрос... Но я хз что именно вводит пользователь и насколько это валидируемо у вас

Go Up