• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Нужен Пример По Работе Онлайн С Mysql Базами Данных

  • Автор темы basenowse
  • Дата начала
B

basenowse

начните с изучения sql, тут без него не получится работать, а он на все вопросы вам ответит быстро и качественно.
Послать проше всего, каждый может. :)
-----------
Удачно кинутый дятел хорошо летит, крепко встревает и хорошо торчит!!!
 
S

sinkopa

Вопросы:
1.Как считать информацию с таблицы "klient" в TDBGrid чтобы столбец "descript" отображался (или другое решение чтобы поработать с данными в столбце и вернуть их обратно)?
2.Как считать информацию с таблицы "klient" столбца "descript" к примеру в listbox1?
3.Как корректно разъединится с базой чтобы можно было поработать с импортированными данными в TDBGrid?
4.Как заменить старую таблицу "klient" в mysql на отредактированную чтобы не изменились типы столбцов экспортируемых из TDBGrid на место "klient"?
За ранее благодарен за помощь.
Понятно... :)
Поскольку (как я понял) Ваши проблемы (вопросы) не имеют прямого отношения ни к MySQL ни к ZeosLib, давайте так сделаем:
Скинте мне в личку свой емайл, я Вам отправлю код "отвечающий" на Ваши вопросы... ну и дальше будем эту тему обсуждать по почте...
Тем более, как я погляжу, мы с Вами единственные участники данной "дискуссии"... :)
 
M

-master-

Послать проше всего, каждый может
т.е. совет на приобретение знаний для вас является - послать куда подальше? ну тогда вам проще нанять программиста...
 
B

basenowse

Понятно... :)
Поскольку (как я понял) Ваши проблемы (вопросы) не имеют прямого отношения ни к MySQL ни к ZeosLib, давайте так сделаем:
Скинте мне в личку свой емайл, я Вам отправлю код "отвечающий" на Ваши вопросы... ну и дальше будем эту тему обсуждать по почте...
Тем более, как я погляжу, мы с Вами единственные участники данной "дискуссии"... :)
Через ЛС не получилось ошибку выдает здесь напишу delphibox*______, за ранее благодарен.
С уважением
 
M

mrtg

Здравствуйте sinkopa!
я искал и нашел детальное обяснение как настроить и пользоватся ZComponent здесь.
Delhi7
ApacheFriends XAMPP (Basispaket) version 1.7.4 ######
+ Apache 2.2.17
+ MySQL 5.5.8 (Community Server)
+ ZEOSDBO-7.1.3a-stable
создать и локально подключится получилось (как то :) ).
можно показать примерчик подключение с другого компа.
я деляю так
ZConnection1.HostName :=Edit1.Text;// '192,168,1,15';
ZConnection1.Port :=3306;//5432; //
ZConnection1.Protocol := 'mysql';
ZConnection1.User := Edit2.Text;//'user';
ZConnection1.Password := Edit3.Text;//'123456';
ZConnection1.Database:='tion';

не получается. (MySQL и ZComponent для меня новые, непонимаю где ошибка или неправельно деляю)
может я не правельно создаю пользователя для удаленного подключения или что то ещё
не могли бы вы детально раскозать об этом. за ране спс!
 
S

sinkopa

Здравствуйте sinkopa!
я искал и нашел детальное обяснение как настроить и пользоватся ZComponent здесь.
Delhi7
ApacheFriends XAMPP (Basispaket) version 1.7.4 ######
+ Apache 2.2.17
+ MySQL 5.5.8 (Community Server)
+ ZEOSDBO-7.1.3a-stable
создать и локально подключится получилось (как то :) ).
можно показать примерчик подключение с другого компа.
я деляю так
ZConnection1.HostName :=Edit1.Text;// '192,168,1,15';
IP адрес должен быть через точку а не запятую. (192.168.1.15)
ZConnection1.Port :=3306;//5432; //
Порт 3306 должен быть доступен по сети с внешней машины (относительно MySQL сервера).
Проверьте Ваши фаерволы на машинах (сервере и клиенте) а также убедитесь что на этом порту параллельно не работает кто нибудь еще (например MSSQL сервер).
ZConnection1.Protocol := 'mysql';
Если Вы переносите программу на другой компьютер, то клиентская mysql-библиотека должна быть вместе с исполняемым EXE-файлом Вашей программы (кладём рядом либо в системную папку).
DLL-ки для Вашей версии ZEOSDBO качать отсюда:
svn://svn.code.sf.net/p/zeoslib/code-0/tags/7.1.3a-stable/lib/mysql/mariadb_client-1.0.0-win32.zip
ZConnection1.User := Edit2.Text;//'user';
ZConnection1.Password := Edit3.Text;//'123456';
В настройках MySQL сервера, для пользователя ZConnection1.User с паролем ZConnection1.Password должны быть включены права на подключение к серверу с другого компьютера. По умолчанию для нового создаваемого пользователя (с правами записи в базу) разрешены подключения ТОЛЬКО с localhost.
Необходимо (локально) установить для пользователя разрешения подключений "разрешить подключаться с любого IP" либо либо указать допустимые IP адреса для данного пользователя.
ZConnection1.Database:='tion';
Вообще конечно, прежде чем "играться" с Delphi приложением, я бы посоветовал для начала настоить удалённое MySQL соединение, с помощью сторонней программы-обозревателя (или администрирования) баз MySQL.
Когда это у Вас заработает, то и проблемы у Вашей Delphi программы (я думаю) сами отпадут.
не получается. (MySQL и ZComponent для меня новые, непонимаю где ошибка или неправельно деляю)
может я не правельно создаю пользователя для удаленного подключения или что то ещё
не могли бы вы детально раскозать об этом. за ране спс!
Что конкретно не работает? Какую именно ошибку выдаёт Ваша программа?
Если Вы используете TZSQLMonitor то все ошибки должны быть в логе.
 
M

mrtg

Здравствуйте sinkopa!
Спасибо за столь быстрый ответ!
Вы детально рассказали про все этапы.
«с помощью сторонней программы-обозревателя» - к примеру dbForge Studio for MySQL или что то другое?
'192,168,1,15’ IP у меня с «.»там проста отпечатка (все равно СПС за внимание)
«DLL-ки для Вашей версии ZEOSDBO качать отсюда:» -скачал
«Если Вы используете TZSQLMonitor то все ошибки должны быть в логе.» - может я выше указанные невнимательно четал, TZSQLMonitor в пректе есть но не дает логии.

Я постараюсь внимательней пройтись ещё раз.
 
S

sinkopa

Здравствуйте sinkopa!
Спасибо за столь быстрый ответ!
Вы детально рассказали про все этапы.
«с помощью сторонней программы-обозревателя» - к примеру dbForge Studio for MySQL или что то другое?
Да. Любой обозреватель или редактор.
Вот тут например, "куча" вариантов.

выбирайте какой больше нравится.
 
M

mrtg

sinkopa Здравствуйте еще раз!
Вопрос маленький. Как то подключался MySQL серверу через
ADOConnection1 и SQLConnection1. На локальном
компьютере обработка запросов нормально без тормозов.
Когда подключалсяь по VPN подключение программа зависала и тормозила
очень сильно. (оставил вопрос не решённым но теперь опять пришлось возобновить)
Тоже самое подключение и одинаковый запрос на
программе PHP без тормозов.
Вопрос: Сейчас пробую ZConnection будет ли результат как на
PHP или будет тормозит как ADOConnection1 и SQLConnection1.
Если будет тормозить зависать как на ADOConnection1, то я
проста остановлюсь. И не буду копать в том направлении ?
по прошу вас дать другой путь (чтобы программа не зависала
в обращении к MySQL серверу через локальную сеть и VPN)
 
S

sinkopa

sinkopa Здравствуйте еще раз!
Вопрос маленький. Как то подключался MySQL серверу через
ADOConnection1 и SQLConnection1. На локальном
компьютере обработка запросов нормально без тормозов.
Когда подключалсяь по VPN подключение программа зависала и тормозила
очень сильно. (оставил вопрос не решённым но теперь опять пришлось возобновить)
Тоже самое подключение и одинаковый запрос на
программе PHP без тормозов.
Вопрос: Сейчас пробую ZConnection будет ли результат как на
PHP или будет тормозит как ADOConnection1 и SQLConnection1.
Если будет тормозить зависать как на ADOConnection1, то я
проста остановлюсь. И не буду копать в том направлении ?
по прошу вас дать другой путь (чтобы программа не зависала
в обращении к MySQL серверу через локальную сеть и VPN)
Отличие ZeosLib от других библиотек работы с SQL базами в том что она работает на нативных клиетах поддерживаемых SQL движков. Т.е. берется исходный код клиента от производителя движка (в данном случае MySQL) и портируется под совместимость типов с языком библиотеки. Аналогичным образом работает поддержка MySQL в PHP.
Уж не знаю какого совета Вы от меня ожидаете... Скажем так - В тех моих проектах где я использовал ZConnection, у меня всё работает и не тормозит... Устроит Вас такой ответ? :)
К тому же я не думаю что у Вас много альтернативных вариантов. Ну разве что MyDAC, но он платный.
 
M

mrtg

Sinkopa Здравствуйте!
У меня получилось подключится с локалным MSQLBase (по локальной сети) и MSQLBase находяшемся на интернете.
Вам СПС!!!
Вот пришло время перевести программу на комп пользователя.
Я сделал так:
1) Скопирнул саму программу prog.exe на комп юзера
2) В папку с программый prog.exe сбросил libmariadb.dll, libmariadb.lib, mariadbclient.lib (сюда тоже C:\WINDOWS\system32\)

А тут ошибки. (комп Юзера подключён к интернету через прокси). При попытке подключение к серверу в инете выдаю ошибку «Runtime error 216 at 00403e76». И даже по локальной сети так ругался.

1) Не подскажете что нужно делать когда переводится готовая программа к компу юзера.
2) В программе я должен показывать прокси (порт ип пароль и тд) или не надо может как то автоматом захватывается. (хотя выдала ошибку даже локалной)
3) Какие настройки я забыл для запуска программы в компе юзера?
Заранее СПС!
 
S

sinkopa

Sinkopa Здравствуйте!У меня получилось подключится с локалным MSQLBase (по локальной сети) и MSQLBase находяшемся на интернете.
Здравствуйте и Вам :)
Поделитесь пожалуйста с народом, где Вам удалось "нарыть" библиотеку ZeosLib с поддержкой базы Mariadb?
Я вот прямо сейчас просмотрел SVN репозиторий проекта ZeosLib
link removed
и вижу библиотеки только для firebird, freetds, mysql, postgresql и sqlite.
Или есть какой то сторонний модуль расширения? Расскажите пожалуйста где взяли и как устанавливали. Я думаю интересно не только мне будет.
Кстати, как вариант, если клиент Mariadb устанавливается инсталлером, этим же инсталлером какие нибудь отдельные dll-ки могут регистрироваться в реестре через regsvr32.
Возможно именно в этом Ваша проблема с переносом программы на другой комп.
Вот пришло время перевести программу на комп пользователя.
Я сделал так:
1) Скопирнул саму программу prog.exe на комп юзера
2) В папку с программый prog.exe сбросил libmariadb.dll, libmariadb.lib, mariadbclient.lib (сюда тоже C:\WINDOWS\system32\)
А тут ошибки. (комп Юзера подключён к интернету через прокси). При попытке подключение к серверу в инете выдаю ошибку «Runtime error 216 at 00403e76». И даже по локальной сети так ругался.
1) Не подскажете что нужно делать когда переводится готовая программа к компу юзера.
Ответ в Вашем же вопросе :)
Необходимо корректно перенести на комп юзера рабочее окружение программы. т.е. нужные для работы ехе-шника файлы надо разложить в нужные места, испольуемые COM-объекты зарегистрировать в системе.

Чтобы узнать каких дополнительных DLL-ек нехватает для нормальной работы программы есть очень простой способ.
1. Берём утилиту Dependency Walker
читать тут
качать тут
2. Запускаем (на компе где Ваша прога нормально работает) и открываем в ней ЕХЕ-шник Вашей программы.
В открывшемся дереве наблюдаем все внешние dll-ки функции которых вызывает Ваша программа. Обращаем внимание на места их расположения и версии (важно).
Оччень полезная утилита... рекомендую... :)
3. Повторяем данную "процедуру" с тем же ЕХЕ-шником на другом компьюте (там где работает с ошибками).
Все нужные dll-ки которые ЕХЕ-шник не может обнаружить либо функции отсутствующие в нужной DLL (если старая версия например) в дереве будет помечено красненьким.
4. Внимательно сравниваем полученные (с обоих компов) результаты.
5. Чешем репу, курим, добавляем то чего нехватает, обновляем то что устарело... :)
6. Если не получается - задаём вопросы на форуме.

Перечисленные действия можно так же повторить и отдельно для dll-ек (например для libmariadb.dll).
2) В программе я должен показывать прокси (порт ип пароль и тд) или не надо может как то автоматом захватывается. (хотя выдала ошибку даже локалной)
Не понимаю вопрос. Порт и сетевой адрес прокси программе нужно знать чтобы к нему подключиться. Если прокси требует пароль, то его следует указать... а как иначе? :)
Если не хотите заморачиваться с диалогом - сделайте INI-файл и читайте из него на запуске программы.

PS.
Вообще то "Runtime error 216" это ошибка повреждения памяти. Обычно происходит когда (по невнимательности программиста) программа пишет в "чужую" область памяти.
Например у Вас буфер 100 байт а Вы записали в него 150. Или у Вас массив 10 элементов а пишете в 11-й.
Эта бага в определенных условиях может себя никак не проявлять. Никогда не знаешь чем занята (и занята ли) область памяти куда вы "накакали"...
Включите в настройках компилятора опцию RangeCheck и попробуйте погонять прогу в дебаг режиме (на компе где всё вроде бы работает). Это поможет отловить багу (если она есть).

И на последок... Я тут погуглил ради интереса и наткнулся на еще одну интересную трактовку происхождения "Runtime error 216". Советую ознакомиться :)
 
M

mrtg

Sinkopa Здравствуйте!
У меня получилось подключится с локалным MSQLBase (по локальной сети) и MSQLBase находяшемся на интернете.
Вам СПС!!!
Вот пришло время перевести программу на комп пользователя.
Я сделал так:
1) Скопирнул саму программу prog.exe на комп юзера
2) В папку с программый prog.exe сбросил libmariadb.dll, libmariadb.lib, mariadbclient.lib (сюда тоже C:\WINDOWS\system32\)

А тут ошибки. (комп Юзера подключён к интернету через прокси). При попытке подключение к серверу в инете выдаю ошибку «Runtime error 216 at 00403e76». И даже по локальной сети так ругался.

1) Не подскажете что нужно делать когда переводится готовая программа к компу юзера.
2) В программе я должен показывать прокси (порт ип пароль и тд) или не надо может как то автоматом захватывается. (хотя выдала ошибку даже локалной)
3) Какие настройки я забыл для запуска программы в компе юзера?
Заранее СПС!
 
M

mrtg

Sinkopa я делетант. и по этому я у вас советуюсь и узнаю много что. :)
Mariadb- может я не правельно написал или вы не правельно поняле меня. (я не знаю, руский не радной язык :) )
мне дали: адрес;порт;протокол;логин (таблицы и его столбцы);пароль. те же веши что и у вас на примере.
(как я понял там на хосте тоже mysql база создана через Cpanel\phpmyadmin\)
 
M

mrtg

Sinkopa к примеру:
1) вот вы инсталлировали web server на своем компе, Delphi тоже у вас на компе. (Инструмент управления сервером MySQL у вас Денвер у меня XAMPP)
Проект готов. Вам нужна отдать программу пользователю который будет обрашатся на ваш комп по локальной сети. (ваше действии по шаговая)
2) после того как всё получилось. если у пользователя прямое подключение к интернету то программы работает (только меняема MySQLна хосте ZConnection1.HostName:= меняема остальное одинаково). А что делать если пользователя выходит в интернет через прокси и другой порт (я видел у нево на браузере INTERNET EXPLORER/Сервис/Свойства обозревателя/подключения/настройка сети до пусти адрес: 192.168.1.123 порт:1592)
3) depends22_x86 скачал запустил (не разобрался :) )
 
S

sinkopa

Sinkopa я делетант. и по этому я у вас советуюсь и узнаю много что. :)
Mariadb- может я не правельно написал или вы не правельно поняле меня. (я не знаю, руский не радной язык :) )
мне дали: адрес;порт;протокол;логин (таблицы и его столбцы);пароль. те же веши что и у вас на примере.
(как я понял там на хосте тоже mysql база создана через Cpanel\phpmyadmin\)
Прикольно. А Вы точно читали мои предыдущие посты в этой теме? :)
Дело в том что libmariadb.dll, libmariadb.lib, mariadbclient.lib - это НЕ MySQL. Это клиентские библиотеки для базы Mariadb. Я никогда не упоминал ни о чем подобном. Откуда Вы взяли что из нужно использовать и куда-то копировать?
Если Вы действительно используете MySQL, то нужные Вам библиотеки это:
libmysql41.dll, libmySQL50.dll, libmysql51.dll, libmysql55.dll
Перечитайте мой пост по этой ссылке
https://codeby.net/threads/49988.html?vi...st&p=234500
там подробно написано где взять и куда складывать.
 
S

sinkopa

Sinkopa к примеру:
1) вот вы инсталлировали web server на своем компе, Delphi тоже у вас на компе. (Инструмент управления сервером MySQL у вас Денвер у меня XAMPP)
Проект готов. Вам нужна отдать программу пользователю который будет обрашатся на ваш комп по локальной сети. (ваше действии по шаговая)
1. Собрал бы нужные файлы для работы программы. В идеале конечно сделал инсталлятор. Например с помощью InnoSetup
2. Настроил бы сервер MySQL чтобы принимал запросы с внешней стороны. Имеется в виду адрес сетевой платы полученный при соединении с сетью. Это делается через утилиту в конфигурации MySQL сервера или его конфиг-файлы.
3. Создал бы (через phpmyadmin пользователя базы, которому было бы разрешено подключаться не только локально но и с внешнего сетевого адреса.)
3. Настроил бы фаервол на своём компьютере, чтобы пропускал запросы от данного конкретного пользователя на порту MySQL.
2) после того как всё получилось. если у пользователя прямое подключение к интернету то программы работает (только меняема MySQLна хосте ZConnection1.HostName:= меняема остальное одинаково). А что делать если пользователя выходит в интернет через прокси и другой порт (я видел у нево на браузере INTERNET EXPLORER/Сервис/Свойства обозревателя/подключения/настройка сети до пусти адрес: 192.168.1.123 порт:1592)
Ну... вообще то я бы сказал, что это проблемы пользователя и его взаимоотношений с системным администратором его сети... :)
Дело в том что клиентские библиотеки MySQL "предполагают" что им для работы указывают адрес MySQL сервера и его порт. Каким образом будет обеспечен "безпрепятственный" доступ к этим адресу и порту им (библиотекам) "по барабану".
Возможные варианты решения:
1. Сисадмин открывает "прямой проход" (мимо прокси) для запросов к адресу MySQL сервера, на порту MySQL сервера.
2. Сисадмин, настраивает прокси, на автоматическую переадресацию внутренних запросов к адресу MySQL сервера на внешний порт MySQL сервера и обратно.
3. Сисадмин организует (через прокси) VPN соединение между пользователем и компьютером (сервером MySQL).
4.1. Пользователь использует стороннюю программу организующую туннель через прокси. И тогда в настройках Вашей проги указывает не реальный адрес и порт MySQL сервера а параметры из настроек программы тунеллирования.
Например можно попробовать бесплатную proxytunnel или поискать интернете что нибудь другое. варианты есть.
4.2. Вы сами пишете такую программу... :)
3) depends22_x86 скачал запустил (не разобрался :) )
Ну... не знаю даже чем Вам тут помочь... Там всего несколько кнопок и для каждой кнопки работает "F1".
Вам по сути нужна всего одна: "File->Open..." :)
1. Открываете Ваш "myprog.exe", смотрим дерево связей.
2. На верхушке дерева Ваш "myprog.exe". от него "растут" имена dll-ек из которых myprog.exe в процессе работы вызывает функции.
3. Если возле имени какой-то dll нарисован значок "not found (не найдена)", то значит этой нужной dll нет на компе или она лежит в месте где myprog.exe ее "не видит"
4. От каждой dll-ки "растут" ветки с другими dll, которые те в свою очередь используют. Но Вам туда лезть смысла нет.
Всё.
Если опять непонятно... ну тогда Вам в гугл с запросом "Как работать с программой Dependency Walker".
 
M

mrtg

Sinkopa спасибо!
За подробный ответ.
Извините за невнимательность (я читал ваш POST) :)

1) как вы сказали мне нужны были
"Если Вы действительно используете MySQL, то нужные Вам библиотеки это:
libmysql41.dll, libmySQL50.dll, libmysql51.dll, libmysql55.dll"- надеюсь заработают

2) требование к сиси админу тоже учту и по прошу

Буду дальше разбираться :)
 
M

mrtg

Sinkopa Здравствуйте ещё раз!
Хочу поблагодарить за советы!
И спросить кое что ;) Пока не получилось уговорить сисадмина :)
Можно ли обойтись без вмешательства сис админа и дополнительных утилит . а вместо этого дописать какой та код внутри этой программы чтобы я смог выйте на свет зная адрес: 192.168.1.123 и порт:1592 проксия для доступа в инет (и если будут пароли тоже учесть)
Как то вы говорили про сохранение настроек *.ini или записать прямо в программе (если допустить что прокси не меняется некогда)
Если ДА не могли бы вы дать примерчик-код! Было бы очень удобно : )
Заранее СПС.
 
S

sinkopa

Sinkopa Здравствуйте ещё раз!
Хочу поблагодарить за советы!
И спросить кое что ;) Пока не получилось уговорить сисадмина :)
Можно ли обойтись без вмешательства сис админа и дополнительных утилит . а вместо этого дописать какой та код внутри этой программы чтобы я смог выйте на свет зная адрес: 192.168.1.123 и порт:1592 проксия для доступа в инет (и если будут пароли тоже учесть)
Как то вы говорили про сохранение настроек *.ini или записать прямо в программе (если допустить что прокси не меняется некогда)
Если ДА не могли бы вы дать примерчик-код! Было бы очень удобно : )
Заранее СПС.
(1). Прокси сервер является элементом сетевой защиты. Обычно он работает в паре с брандмауэром (фаервол) либо они выступают в одном лице.
Проход сетевого трафика сквозь сетевую защиту проив воли сисадмина называется взломом... :)

Допустим сервер MySQL находящийся "снаружи" работает на IP XXX.XXX.XXX.XXX, порт 3306.
Для того чтобы клиент (программа) смогла достучаться к этому серверу MySQL, технически необходимо чтобы:
- фаервол разрешил клиенту сетевой обмен на порту сервера MySQL (и кстати, на порту прокси тоже )
- прокси сервер умел (был настроен) делать перенаправления сетевых пакетов с 192.168.1.123 порт:1592 на IP XXX.XXX.XXX.XXX, порт 3306 и обратно.

Типовые настройки корпоративного прокси сервера содержат перенаправлелия только для портов 80 (HTTP), 21 (FTP) и еще несколько (smtp,pop/imap, icq...)
Всё это настраивает системный администратор и обычно порт 3306 (стандартный порт сервера MySQL) в этот список у него не входит.
Так что как минимум в этом вопросе Вам с сисадмином придется договариваться... :)

Как альтернатива, еще можно перенастроить сервер MySQL на один из открытых для прохода через прокси и фаервол портов. Но тут может возникнуть другая проблема (если вдруг на компьтере с сервером MySQL этот порт окажется занять другим сервисом).

(2). Допустим вопрос (1) Вы решили. Дальше встаёт другая проблема.
Прокси серверы бывают разные.
Они различаются по виду а также по используемым типу и протоколу авторизации.

Я не говорю что невозможно реализовать работу с прокси непосредственно в коде Вашей программы, но думаю что трудозатраты в итоге окажутся гораздо больше чем Вы потратили на весь остальной функционал.
Проще воспользоваться сторонней программой.
Как я уже говорил, можно попробовать использовать Proxytunnel
Он бесплатный и конфигурируется через INI файл.
Вы можете включить исполняемые файлы Proxytunnel в набор файлов Вашей программы и настраивать (ini файл) и запускать/останавливать из кода Вашей программы. :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!