Opened 3 years ago
Last modified 15 months ago
#879 reopened дефект
Уязвимость для SQL injection
Reported by: | san | Owned by: | Denis_N |
---|---|---|---|
Priority: | major | Component: | БД изделий АДС |
Keywords: | Cc: |
Description
Возможно в базе остались уязвимости для SQL injection.
Нужно проинспектировать код и устранить уязвимости
Change History (8)
comment:1 by , 18 months ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 17 months ago
Replying to san:
Однако в таком случае невозможно будет использовать множественные запросы, что, как я понял, подразумевается в #870.
Хотел бы услышать ещё мнения.
Во-первых, предложение #870 по-моему никак не связано с мультизапросами. Предложение #870 решается (в общем случае) четырьмя запросами:
START TRANSACTION; UPDATE `peoducts` SET ....; INSERT INTO `history` .....; COMMIT;
и ничто не мешает выполнять их отдельными вызовами API.
Во-вторых я нигде не видел утверждения о том, что prepared statements не могут использовать мультизапросы (хотя не встречал и утверждений обратного), типа таких:
$mysqli->prepare("UPDATE peoducts SET a=?, b=?; INSERT INTO history(a, b) VALUES(?, ?);")->bind_param("isis", 123, "abc", 456, "def");
comment:4 by , 17 months ago
Во-первых, предложение #870 по-моему никак не связано с мультизапросами. Предложение #870 решается (в общем случае) четырьмя запросами:
О, спасибо за уточнение, на слово транзакция я не обратил внимание.
утверждения о том, что prepared statements не могут использовать мультизапросы
Вот тут:
Использование множества выражений в подготавливаемом запросе не поддерживается.
https://www.php.net/manual/ru/mysqli.quickstart.multiple-statement.php
И, я так понимаю, ничего не помешает внутри транзакции использовать подготовленные запросы и мои опасения, что это помешает #870, не оправдаются.
В таком случае предлагаю использовать в интерфейсе базы только подготовленные запросы, для обеспечения гарантированной защиты от инъекций.
comment:6 by , 15 months ago
Resolution: | → готово |
---|---|
Status: | assigned → closed |
comment:7 by , 15 months ago
Resolution: | готово |
---|---|
Status: | closed → reopened |
Денис вспомнил, что на главной странице подготавливаемые запросы ещё не реализованы.
Для того чтобы навсегда забыть про возможные инъекции, я хотел предложить использовать подготовленные запросы.
Однако в таком случае невозможно будет использовать множественные запросы, что, как я понял, подразумевается в #870.
С другой, стороны множественные вопросы сами по себе повышают риск инъекций, по сравнению с обычными:
Хотел бы услышать ещё мнения.