Код, внедренный в PHP-файл с правами доступа 777

Код, внедренный в PHP-файл с правами доступа 777

Я проснулся и обнаружил, что во всех папках моего shared-web-host с правами доступа 777 есть два новых php-файла. Код внутри файла не удалось прочитать — вот расшифрованная версия:http://pastie.org/779226(что за...?) Этот код был внедрен даже в некоторые PHP-файлы.

Я в недоумении, КАК кто-то мог это сделать? Я знаю, что иметь разрешение 777 — не самая умная вещь, но как они вообще попали в мою систему папок.

Я всего лишь программист клиентской части, и было бы здорово, если бы я дал вам совет, как избежать подобных ситуаций в будущем.

Ваше здоровье.

решение1

Вот деобфусцированная версия скрипта:http://pastie.org/private/iobgt7aetg8mezoepucsg

Похоже, код включает в себя внешний PHP-код с другого веб-сайта и при этом собирает информацию о ваших посетителях.

Один из способов, которым это могло произойти, заключается в том, что вы разрешаете загрузку файлов в каталог, доступный извне. Делать это без надлежащей проверки опасно, поскольку злонамеренный пользователь может загрузить файл PHP (используя вашу загрузку изображения) с вредоносным кодом. Если веб-сервер не настроен должным образом, код будет запущен по запросу.

Чтобы избежать подобных проблем, убедитесь, что:

  • Процессы PHP запускаются пользователем с ограниченными правами.
  • Файлы, которые не нужно редактировать, доступны для записи только владельцу (0644 или 0744 в зависимости от того, требуется ли вам бит выполнения или нет).
  • Только сделайте каталог загрузки доступным для записи.
  • Попробуйте использовать каталог загрузки, который находится вне вашего веб-корня. Затем используйтеreadfile()для обслуживания файла.
  • Проверьте файлы. Если вы хотите, чтобы ваша форма допускала только изображения, проверьте магические биты и убедитесь, что изображение является допустимым. Это очень часто упускаемый из виду шаг. То же самое относится к любому другому формату. Не полагайтесь на расширение файла или тип MIME, отправленные клиентом. Проверьте фактическое содержимое файла.

решение2

Мне приходит в голову по крайней мере два варианта:

  1. Они нашли ваш пароль FTP
  2. Они обнаружили уязвимость в вашем программном обеспечении PHP

Чтобы предотвратить их возникновение:

  1. Используйте сложный пароль (минимум 9 символов, смешанный регистр, цифры и специальные символы)
  2. Запустите 777, как будто это число зверя; попробуйте дать веб-серверубольше не надочем разрешения на чтение для ваших скриптов, и предоставьте особые разрешения для (надеюсь, редких) папок/файлов, куда ему придется писать.

Если у вас есть доступ к некоторым журналам (журналам доступа Apache и журналам FTP с любого FTP-сервера, на котором работает ваш сайт), это может оказаться полезным для понимания того, что произошло.

Сомнительно, что им удалось внести так много изменений с помощью простой ошибки в ваших скриптах, если только это не действительно широко распространенная ошибка (например, у вас есть незащищенный скрипт, оборачивающий fopen() только над тем, что нравится пользователю), поэтому я бы в первую очередь проверил журнал FTP.

Связанный контент