dbf_usr Posted May 14, 2019 Share Posted May 14, 2019 Интересует есть ли в UniGUI защита от SQL injection? И если есть то где об этом читать в доке или может кто краткий примерчик бросит. Если нет таковой, то поделитесь опытом кто как решал проблему. Всем заранее спасибо! Link to comment Share on other sites More sharing options...
Sherzod Posted May 14, 2019 Share Posted May 14, 2019 7 minutes ago, dbf_usr said: Интересует есть ли в UniGUI защита от SQL injection? Простите, а что в вашем понимании означает SQL Injection? Link to comment Share on other sites More sharing options...
dbf_usr Posted May 14, 2019 Author Share Posted May 14, 2019 Вот нашел старую ветку: http://forums.unigui.com/index.php?/topic/1407-sql-injection/ с тех пор что-то изменилось в компонентах? Link to comment Share on other sites More sharing options...
dbf_usr Posted May 14, 2019 Author Share Posted May 14, 2019 19 minutes ago, Sherzod said: Простите, а что в вашем понимании означает SQL Injection? "Внедрение SQL-кода (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода." https://ru.wikipedia.org/wiki/Внедрение_SQL-кода для примера, если в UniEdit, где пользователь должен ввести имя пользователя или пароль ввести следующее " ' UNION DELETE FROM users *; и если пользователь угадает название таблицы, то можно остаться вообще без данных... Это и есть SQL Injection. Теперь собственно правильный вопрос: поскольку очень часто приходится собирать запросы в динамике то очень удобно использовать конструкцию типа UniQuery1.sql:='Select * from ........' и подставлять прямо в запрос значения к примеру из UniEdit и это очень опасно, по описаной выше причине. Можно собрать на лету запрос с параметрами, запихнуть его в UniQuery, а потом присваивать параметры, это долго и много кода - гораздо больше. Ну есть еще путь все выписать UDF но их придется писать под каждый случай десятками или универсальную на десять страниц, что тоже не правильно. Отсюда вопрос предусмотрена ли защита в компонентах от SQL Injection и как ею можно воспользоваться? К примеру бывает реализация отлова запроса в строке, бывает экранирование встроенного запроса в строке, что бы он воспринимался как текст, а не часть запроса. Мой вопрос понятен? Link to comment Share on other sites More sharing options...
Sherzod Posted May 14, 2019 Share Posted May 14, 2019 5 minutes ago, dbf_usr said: "Внедрение SQL-кода (англ. SQL injection) — один из Ну это я знаю... Link to comment Share on other sites More sharing options...
Sherzod Posted May 14, 2019 Share Posted May 14, 2019 Нужно всегда использовать параметризованные запросы... Link to comment Share on other sites More sharing options...
dbf_usr Posted May 14, 2019 Author Share Posted May 14, 2019 Спасибо! Link to comment Share on other sites More sharing options...
stas Posted May 14, 2019 Share Posted May 14, 2019 Защиты нет, потому что это не php UniGui этому не подвержена. Link to comment Share on other sites More sharing options...
dbf_usr Posted May 15, 2019 Author Share Posted May 15, 2019 11 hours ago, stas said: Защиты нет, потому что это не php UniGui этому не подвержена. Подвержена. Просто Вы не проводили эксперименты. А я увидел своими глазами что можно почистить таблицы к примеру или удалить объекты базы. Но это при определенных условиях... Увидел = проделал своими руками. Это при условии что доступы на уровне БД это позволяют сделать + если запрос формируется в приложении: Query1.SQL:='Select * From...' Сейчас тестирую макросы, передаю запрос а потом подставляю параметры. Проверю - отпишусь. Собственно для этого и смотрю что реально прилетает на сервер... Link to comment Share on other sites More sharing options...
Tokay Posted May 16, 2019 Share Posted May 16, 2019 Quote Подвержена это никак не связано с унигуем, но с вашим кодом. подвержен именно ваш код. как с этим бороться - уже сказали. Quote Собственно для этого и смотрю что реально прилетает на сервер... на сервер прилетает то, что вы на него шлёте как ни странно... Link to comment Share on other sites More sharing options...
stas Posted May 16, 2019 Share Posted May 16, 2019 On 5/15/2019 at 11:48 AM, dbf_usr said: Подвержена. Просто Вы не проводили эксперименты. А я увидел своими глазами что можно почистить таблицы к примеру или удалить объекты базы. Но это при определенных условиях... Увидел = проделал своими руками. Это при условии что доступы на уровне БД это позволяют сделать + если запрос формируется в приложении: Query1.SQL:='Select * From...' Сейчас тестирую макросы, передаю запрос а потом подставляю параметры. Проверю - отпишусь. Собственно для этого и смотрю что реально прилетает на сервер... Конечно, если есть строка редактирования и запрос который выполняет ddl скрипт из этой строки, то будет. Но это добровольный SQL injection. Link to comment Share on other sites More sharing options...
zilav Posted May 17, 2019 Share Posted May 17, 2019 +1 за параметризированные запросы, вообще отвыкайте строить запрос динамически. В идеале возможно вообще использовать хранимые процедуры, а там размер параметров вообще задается и никуда ты с подводной лодки не денешься. Link to comment Share on other sites More sharing options...
Volk65 Posted May 17, 2019 Share Posted May 17, 2019 3 hours ago, zilav said: +1 за параметризированные запросы, вообще отвыкайте строить запрос динамически. В идеале возможно вообще использовать хранимые процедуры, а там размер параметров вообще задается и никуда ты с подводной лодки не денешься. +1. При работе с большими базами никто не использует динамические запросы создаваемые на клиенте. При таком подходе сплошные минусы. Практически всё что вы делаете на клиенте можно (и нужно) делать на сервере. Link to comment Share on other sites More sharing options...
dbf_usr Posted May 18, 2019 Author Share Posted May 18, 2019 Спасибо!!! Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now