Сайт одного из наших старых клиентов взломали. После взлома на сайте появилась странная красная плашка снизу страницы (https://imgur.com/gYWYQ0r). Исходников в гите у нас не осталось, могу дать только архив с прода ( exam.tgz).
Задача: найти и удалить вредоносный код. В ответе указать необходимые действия, чтобы от него избавиться.
Распаковать архив:
tar zxvf exam.tgz exam
Есть два сервиса: app/Services/Loggers/{Foo,Bar}.php. Каждый из них хочет что-то логировать, причем каждый из них хочет логировать в свой файл (storage/logs/foo.log для сервиса Foo, storage/logs/bar.log -- для Bar). Необходимо решить эту задачу не меняя сами сервисы, т.е. не меняя код в app/Services/Loggers/{Foo,Bar}.php.
Для быстрой проверки происходящего был подготовлен тест tests/Unit/LoggingTest.php, который можно запустить следующей командой: ./vendor/bin/phpunit tests/Unit/LoggingTest.php. Он должен отработать.
Есть контроллер app/Http/Controllers/ActionController.php который диспатчит ивент.
Нужно записать в логи строку action fired from ip: $ip
, вместо $ip
должнен подстовляться ваш ip из реквеста. В
контроллере код менять нельзя.
Для проверки используем комманду
php artisan serve # сервер будет доступен по url http://localhost:8000
Контроллер прописан в роутах api.php
Расширяем задачу 3. Теперь нужно писать в логи строку раз в минуту, при обращении с одного и того же ip адреса. Если
метод вызывается чаще, то пишем в логи строку duplicate action from ip: $ip
БД использовать нельзя. Менять код контроллера попрежнему менять нельзя.
Есть контроллер app/Http/Controllers/ResponseController.php Контроллер отдает объект сервиса app/Services/ResponseClass/ResponseClass.php
Если посмотреть http://localhost:8000/api/response, то мы увидим строку. Нужно не меняя код сервис и контроллера отдать json формата:
{
"name": "Foo",
"description": "Bar"
}
Можно изменять код только в трейте Convert и интерфейсе Response