Skip to content

Fix db query injections#68

Open
TheKing-OfTime wants to merge 2 commits intomasterfrom
fix_DB_query_injections
Open

Fix db query injections#68
TheKing-OfTime wants to merge 2 commits intomasterfrom
fix_DB_query_injections

Conversation

@TheKing-OfTime
Copy link
Collaborator

No description provided.

if (int.options.getSubcommand() === 'auto-sync') {
await int.deferReply({ ephemeral: true });
DB.query(`UPDATE users SET mode = "${int.options.getString('mode')}" WHERE id = ${int.user.id};`)[0];
DB.query(`UPDATE users SET mode = ? WHERE id = ?;`, [int.options.getString('mode'), int.user.id])[0];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Гравис лучше заменять на обычные одинарные кавычки.
И зачем мы в конце имеем [0]?

Comment on lines -277 to +279
? `SELECT * FROM warns WHERE id = (SELECT MAX(id) FROM warns WHERE target = ${target})`
? `SELECT * FROM warns WHERE id = (SELECT MAX(id) FROM warns WHERE target = ?)`
: `SELECT * FROM warns WHERE id = (SELECT MAX(id) FROM warns)`;
const data = DB.query(query);
const data = DB.query(query, target ? [target] : undefined);
Copy link
Collaborator

@ruskotwo ruskotwo Feb 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это выглядит крайне сомнительно. По сути ты делаешь 2 проверки.
Лучше заменить сразу на что то такое:

const data = target
	? DB.query('SELECT * FROM warns WHERE id = (SELECT MAX(id) FROM warns WHERE target = ?)', target)
	: DB.query('SELECT * FROM warns WHERE id = (SELECT MAX(id) FROM warns)');

И сам запрос выглядит как лютый ужас. По сути, твоя задача - получить последнюю добавленную строку.
В итоге ты делаешь запрос, который содержит второй запрос, который функцией MAX находит максимальное значение и возвращает тебе.

Хотя для твоей цели подойдёт такой запрос:

SELECT * FROM warns WHERE target = ? ORDER BY id DESC LIMIT 1;
SELECT * FROM warns ORDER BY id DESC LIMIT 1;

Тут ты сортируешь от максимального айдишника и лимитом забираешь лишь одну строку. Этот запрос будет в тысячи раз менее ресурсоёмким.

Comment on lines -293 to +295
? `SELECT * FROM warns WHERE NOT flags & 4 AND target = ${target}`
? `SELECT * FROM warns WHERE NOT flags & 4 AND target = ?`
: `SELECT * FROM warns WHERE NOT flags & 4`;
const data = DB.query(query);
const data = DB.query(query, target ? [target] : undefined);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Та же история с двумя проверками и лишней константой query, которая более не будет использоваться

Copy link
Collaborator

@ruskotwo ruskotwo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Грависы поменять на одиночные кавычки, исправить описанные места

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants