Футбольный онлайн-менеджер: перенос с движка 2016 года
Взяли браузерную футбольную игру на CrazyCMS 2016 года, закрыли дыры в безопасности, перевели на PHP 8.5, переделали админку и дизайн и перенесли на отдельный сервер с автоматической выкладкой.
euroliga.onlineЗадача
ЕВРОЛИГА — браузерный футбольный менеджер: игрок получает клуб, проводит матчи против других людей и играет в кубках. Сайт работал на движке CrazyCMS примерно 2016 года, в кодировке windows-1251, на старом виртуальном хостинге. Формы отдавали ошибку 403, потому что принимали запросы только со старого домена. Аудит нашёл больше 30 мест, где SQL-запрос собирался склейкой строк, а загрузчик файлов в админке принимал PHP-скрипты, то есть через него можно было выполнить свой код на сервере.
Решение
Сначала перенесли сайт в репозиторий, вынесли пароли и ключи из кода и подняли локальный стенд в Docker, чтобы проверять правки до выкладки. Затем перевели код на PHP 8.5, закрыли SQL-инъекции и XSS, перешли на хеши паролей, ограничили число попыток входа и включили защищённые cookie. Сайт работает только по HTTPS с HSTS. Старую админку вместе с CKEditor и CKFinder удалили и написали новую на Tabler.
Сервер и выкладка
Игра переехала с виртуального хостинга на отдельный VPS с Ubuntu и Apache. Выкладку делает GitHub Actions: после слияния в основную ветку файлы уходят на сервер через rsync по ключу, а ключ на сервере ограничен одной папкой. Рядом работает тестовая копия: она закрыта паролем и от индексации, письма с неё не уходят, и выкладывается она из своей ветки. Заказчик смотрит правку на тестовой копии и только потом даёт команду перенести её на боевой сайт.
Дизайн, телефоны и языки
В игру чаще заходят с телефона, поэтому мобильную версию переделали отдельно. Матч идёт на двух полях 3×3, на ход даётся пять минут, и всё это должно помещаться на узком экране. Добавили тёмную и светлую темы. Интерфейс работает на четырёх языках: русском, белорусском, казахском и английском. В игре 32 страны и 1536 клубов, у городов и клубов появились свои баннеры.
Игровые функции и оплата
В игре работают кубки с группами, чемпионат на 24 клуба, боты на свободных местах, рейтинг Эло и чат с модерацией. Мы подключили приём оплаты через RollyPay: подпись каждого уведомления о платеже проверяется по HMAC, к оплате добавлены оферта и согласия. За рубли теперь продаётся VIP-статус. Сквозные тесты гоняют сценарии в настоящем браузере Chromium, а расчёт турнирной таблицы проверяется на 300 случайных группах.
Технологии
Обсудим задачу
Расскажите о проекте — предложим решение и оценку
Посмотрим на задачу, процессы и бюджет и предложим, как её закрыть. Работаем по Fixprice или T&M.
- Телефон
- +7 (981) 894-98-79
- info@aimatik.ru
- Режим работы
- Пн–Пт, 9:00–19:00 МСК