Экспертиза процесса разработки программного обеспечения

Судебная экспертиза исходного кода на PHP

Исследуем сайты и сервисы на PHP — «1С-Битрикс», WordPress, Laravel, Symfony: что подрядчик написал сам, а что пришло с коробкой, соответствует ли сделанное заданию и когда появились спорные файлы.

Ориентир по стоимости экспертизы
от 100 000 ₽
Ориентир по сроку экспертизы
10 рабочих дней
  • Судебные экспертизы
  • Внесудебные исследования
  • Рецензирование заключений
01 Проверим компетенцию

До оплаты определим, относится ли задача к выбранному виду исследования.

02 Поможем подготовиться

Уточним вопросы и перечень материалов — готовый комплект не обязателен.

03 Работаем с регионами

Принимаем задачи из России, Казахстана и Беларуси; часть материалов можно передать электронно.

04 Сопровождаем результат

Разъясняем методику и выводы, отвечаем на вопросы суда в пределах компетенции эксперта.

О направлении

Подробно о задачах, объектах и методиках

Материал описывает типовые задачи и вопросы. Окончательные формулировки определяются с учётом компетенции эксперта, а правовую оценку обстоятельствам даёт суд.

Содержание страницы

    Спорите с подрядчиком о сайте, интернет-магазине или корпоративном портале, и в основе спора — вопрос, который суд формулирует одинаково независимо от технологии: соответствует ли сделанное техническому заданию. У PHP ответ на него получают иначе, чем у других языков, — из-за устройства самого языка. Программу на PHP, за редкими исключениями, не собирают заранее в отдельный поставляемый файл: на сервере лежат те же самые тексты, которые писал разработчик. Исходный код здесь не прячется в сборке и не теряется при поставке: на сервере работает он сам. От этого зависит весь ход исследования: материал для эксперта обычно уцелел, но правку в него мог внести кто угодно и в любой момент, включая период спора. Экспертиза исходного кода на PHP — специализированное направление экспертизы процесса разработки программного обеспечения. На выходе вы получаете заключение с описанием объектов, методов и ограничений; какое доказательственное значение оно получит, оценивает суд.

    Если спор уже начался, снимите копию сервера раньше всего остального. На площадке с PHP правка одного файла занимает секунды и не оставляет следа в истории изменений, если её вносили не через репозиторий, а по FTP или через панель хостинга. Раньше всего пропадают копия каталога сайта, выгрузка базы данных и резервные копии, которые ещё держит хостинг-провайдер. Что именно сохранять и в каком порядке — ниже, в разделе «Что сохранить, пока площадка не изменилась».

    Предварительный разбор задачи бесплатный и начинается с разговора: достаточно назвать адрес сайта, описать спор и перечислить, что у вас есть. Собирать архив к этому моменту не требуется — как передавать материалы, договоримся потом и безопасным способом.

    С какими спорами приходят

    Приходят тогда, когда спор держится на проверяемом: на составе переданного, на поведении программы, на зафиксированном ходе работ. — в состояние сайта, состав переданных файлов и зафиксированный ход работ, а не только в толкование договора. До начала работы определите, о какой версии, площадке и периоде идёт речь: без этого у исследования нет предмета.

    Вот с чем приходят чаще всего:

    • подрядчик сдал сайт или интернет-магазин на «1С-Битрикс», WordPress, Laravel или самописном движке, а заказчик считает техническое задание невыполненным;
    • стороны расходятся в объёме: подрядчик считает работой весь каталог сайта, заказчик — только то, что подрядчик написал сам, а не получил вместе с коробочной системой и модулями из каталога;
    • сайт взломали, на страницах появился чужой код, и стороны спорят, чья это зона ответственности;
    • после расторжения договора заказчику передали архив, который не разворачивается: не хватает файлов, настроек или выгрузки базы;
    • подрядчик закрыл часть кода энкодером и после спора отказывается продлевать лицензию, а заказчик не может ни доработать сайт, ни сменить исполнителя;
    • заказчик утверждает, что подрядчик выдал за свою разработку купленный шаблон или чужой модуль;
    • требуется установить, когда именно появились спорные файлы или страницы, — при отсутствии репозитория и при споре о датах.

    Если ваш вопрос звучит иначе — например, спор идёт о самом факте публикации на странице, а не о коде, — точнее начать с экспертизы веб-сайтов.

    Почему исходный код на PHP обычно цел — и почему это не упрощает дело

    Разница с компилируемыми языками принципиальная. Программу на C++ перед запуском превращают в машинный код, и восстановить из него исходный текст почти невозможно; у Java промежуточная форма читается специальными средствами и во многом восстанавливается, но это уже не тот текст, который писал разработчик. И там и там спор часто начинается с того, что заказчику передали результат сборки, а не исходники. Браузерная часть на JavaScript попадает к посетителю собранной и сжатой. В PHP этого шага нет: файл, который лежит на сервере, — это текст, написанный разработчиком, вместе с комментариями и именами переменных. Поэтому вопрос «а есть ли вообще исходный код» на площадке с PHP почти никогда не встаёт.

    Обратная сторона в том, что лёгкость правки бьёт и по доказательству. Достаточно доступа по FTP или к панели управления хостингом, чтобы за минуту изменить логику расчёта, дописать строку в шаблон или удалить файл, — и если правка шла мимо репозитория, о ней не останется записи. Время изменения файла хранится в файловой системе и задаётся произвольно; его нельзя принимать за дату написания кода. Поэтому исследование начинают не с чтения кода, а с вопроса о происхождении копии: откуда она снята, кем, когда, что удостоверяет её неизменность с этого момента. Ответ на него определяет, какой вес имеют все дальнейшие выводы.

    Поэтому хранить надо не сам архив с кодом, а архив с описанием, как он получен, и с посчитанными контрольными суммами. Как их считать, показано ниже.

    Есть и встречное обстоятельство, которое эксперт проверяет до чтения кода: сервер не всегда исполняет ровно то, что лежит в каталоге. Промежуточный результат обработки страниц кешируется, и при отключённой сверке с файлами изменённый текст может не применяться до перезапуска; часть проекта бывает закрыта энкодером или собрана в один файл-приложение. Поэтому в заключении фиксируют не только содержимое каталога, но и настройки, определяющие, что именно выполнялось на спорной площадке.

    Чем это отличается от аудита кода и от проверки сайта

    Три разные работы часто называют одним словом. Разница между ними — в адресате и предмете, а не в глубине.

    Аудит кода делают для владельца системы: он отвечает на вопрос «что улучшить» и опирается на выбранные аудитором представления о хорошем коде. Заключение эксперта отвечает на вопрос суда и опирается на названный в материалах критерий — пункт технического задания, требование договора, документацию используемой системы. Поэтому вывод «код написан плохо» в заключении сам по себе не работает: нужно указать, чему именно он не соответствует.

    Проверка сайта как ресурса — тоже другое: там объект — то, что опубликовано по адресу, и вопрос обычно в том, что видел посетитель в конкретный момент. Эти задачи закрывает экспертиза веб-сайтов. Здесь же объект — программное обеспечение и работы по его созданию: соответствие заданию, состав, происхождение, объём. Один и тот же спор нередко требует обеих задач, и тогда их объединяют в одном исследовании, поставив вопросы раздельно.

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

    Если в проекте не только PHP

    Чистых проектов на одном языке почти не бывает, и по PHP это правило работает жёстче всего: серверная часть на PHP почти всегда идёт в паре с браузерной частью на JavaScript, а в крупных системах рядом оказываются и другие языки.

    Для исследования это значит, что границу нужно провести до постановки вопросов, иначе эксперт получит поручение шире своей задачи. Обычно её проводят так:

    • спор о серверной логике — расчёты, заказы, права доступа, обмен с внешними системами: это как раз тема страницы, которую вы читаете;
    • спор о поведении интерфейса в браузере — вёрстка, динамические формы, корзина на стороне клиента: экспертиза исходного кода на JavaScript;
    • рядом с сайтом работает корпоративная система или сервис на других платформах: экспертиза кода на Java, экспертиза кода на Python;
    • спор касается обмена с учётной системой: он разбирается на странице экспертизы 1С.

    Знать язык заранее не обязательно: его называют в техническом задании и в актах, он известен подрядчику, а по составу файлов проекта эксперт определяет его сам. Если спорная функция затрагивает обе стороны — например, сумма считается и в браузере, и на сервере, — в вопросах объектом называют обе стороны — и обе исследуются в одном заключении.

    Ссылки на соседние направления в этом тексте — не предложение заказать несколько экспертиз. Все они ведутся одной организацией, и, когда задач в споре несколько, их обычно ставят вопросами в одном исследовании: это дешевле и быстрее, чем несколько отдельных заключений. Сколько задач в вашем случае и как их лучше сгруппировать, определим на предварительном разборе.

    Битрикс, WordPress, Laravel: что пришло с системой, а что написал подрядчик

    Большинство сайтов на PHP собраны не с нуля. Под ними лежит система управления содержимым — «1С-Битрикс», WordPress, Joomla, Drupal, MODX, — торговая платформа вроде OpenCart или Magento либо каркас разработки: Laravel, Symfony, Yii. Сверху ставятся готовые модули и темы, часть из которых куплена, часть скачана бесплатно. Собственный код подрядчика в такой конструкции может занимать от нескольких процентов до половины объёма, и именно этот разрыв порождает большую часть споров о деньгах.

    Разделить эти слои — самостоятельная экспертная задача, и решение можно проверить. Дистрибутивы систем и модулей публикуются с указанием версий, у пакетов есть описания зависимостей, а у многих коробок — собственные средства проверки целостности. Эксперт сопоставляет каталог сайта с эталонной поставкой той же версии и получает три группы файлов: совпавшие с поставкой; файлы поставки, изменённые на площадке; файлы, которых в поставке нет вовсе. Сравнение при этом ведут не прямо по байтам: выкладка по FTP в текстовом режиме, редактор с другими настройками или перекодировка меняют невидимые части файла — переводы строк, служебную метку в начале, кодировку — не трогая ни одной строки кода. Если это не учесть, ошибка идёт в одну сторону: файлы переходят из «поставки» в «изменённые», и доля подрядчика оказывается завышенной. Поэтому перед сравнением содержимое приводят к единому виду, а расхождения только в форме записи описывают отдельно от содержательных. Первая группа — не работа подрядчика. Вторая требует разбора: изменение может быть согласованной доработкой, а может быть правкой ядра — вмешательством в файлы самой системы, которое её документация запрещает и которое ломает последующие обновления. Технически это разные вещи; согласовывались такие работы или нет, устанавливает суд по документам. Третья — кандидаты в собственный код, но и среди них встречаются чужие библиотеки, просто скопированные в проект.

    Эти два действия смешивать нельзя. Эталонный дистрибутив и общедоступные архивы страниц — не материалы дела: это открытые справочные источники, с которыми эксперт сверяет исследуемый объект, и в заключении он указывает, откуда и когда их получил, вместе с их контрольными суммами. А материалы дела — копию сайта, выгрузку базы, журналы — эксперт сам не собирает: их представляет назначивший орган.

    Метод годится не всегда, и где он перестаёт работать, эксперт говорит прямо. Дистрибутивы коммерческих систем — а «1С-Битрикс» именно такой — распространяются по лицензии, и получить эталон нужной версии удаётся не всегда; установка, которую годами обновляли на месте, может не иметь точного соответствия ни одной опубликованной версии; каркасы разработки в этом смысле не поставка — они задают структуру, а не набор файлов; у самописного движка эталона нет вовсе. Там, где сравнить не с чем, вывод об авторстве кода строят на других признаках — на истории изменений, документах и переписке — и надёжность его ниже.

    Устройство систем при этом разное, и это меняет объём работы. У «1С-Битрикс» правки принято выносить в отдельный каталог решений, не трогая ядро, поэтому наличие изменений внутри ядра — само по себе значимый факт, а часть настроек и шаблонов хранится в базе, а не в файлах. У WordPress собственный код подрядчика почти всегда лежит в каталоге тем и плагинов, ключевые настройки — в одном файле конфигурации, а остальное — в таблицах, включая содержимое страниц. У проектов на Laravel или Symfony ядра как такового нет, и сравнивают не с поставкой, а с составом библиотек: файл блокировки версий закрепляет за каждым пакетом точную запись в хранилище исходных текстов, поэтому проверка здесь получается даже строже, чем сверка с дистрибутивом коробки. Поэтому вопрос «сколько написал подрядчик» на одном сайте решается за день, а на другом требует отдельного исследования.

    Особый случай — каталог зависимостей. В экосистеме PHP их устанавливает Composer, который записывает состав в описание проекта, а точные версии — в файл блокировки: он закрепляет и прямые, и косвенные зависимости с указанием источника, из которого пакет получен. Установленные пакеты складываются в отдельный каталог, и по объёму он часто превосходит весь остальной проект. Считать его работой подрядчика нельзя, но и игнорировать нельзя: подобранный состав библиотек и их обновление — это тоже труд, и он не сводится к числу строк. Если файла блокировки версий нет, восстановить состав на спорную дату сложнее, и это ограничение эксперт указывает прямо.

    Версия PHP как самостоятельный предмет спора

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

    Код, написанный под PHP 5.6, на PHP 7 ломается там, где раньше работал: исчезло старое расширение для работы с базой данных, изменилось поведение при ошибках, часть конструкций перестала разбираться. Переход на PHP 8 добавил свой слой: обращение к несуществующей переменной или ключу массива из малозаметного замечания стало предупреждением, а сравнение строки с числом изменило результат — выражение, которое раньше считалось истинным, теперь ложно. Последнее особенно важно для спора: такая перемена не даёт ни ошибки, ни записи в журнале, и сайт просто начинает считать иначе. Для спора это значит, что «сайт не работает» может быть следствием не дефекта кода, а смены окружения — и наоборот, подрядчик мог сдать работу на версии, которая уже не получает обновлений безопасности.

    Что здесь устанавливает эксперт: под какую версию написан код (по используемым конструкциям и объявленным требованиям в описании зависимостей), на какой версии он фактически исполнялся, совместим ли он с той версией, которая указана в техническом задании, и какие именно места отказывают при переносе. Утверждение «версия устарела» без указания на конкретное требование договора или на конкретный отказ остаётся оценочным, и эксперт его не делает.

    Проверяют и то, что входило в обязанности подрядчика по сопровождению: обновление платформы, коробочной системы и модулей — это работа, а не автоматический процесс, и её наличие или отсутствие в договоре меняет предмет исследования.

    Что устанавливает эксперт по коду на PHP

    Круг устанавливаемых обстоятельств задаёт вопрос суда, но по PHP он обычно укладывается в несколько типов. Ниже — то, что подтверждается материалами, а не общими соображениями.

    • соответствие реализованного техническому заданию — по каждому проверяемому требованию отдельно, с указанием способа проверки;
    • состав сайта: какая коробочная система и версия использованы, какие модули и темы установлены, что изменено относительно поставки, что написано сверху;
    • работоспособность заявленной функции на развёрнутой копии и причина отказа, если функция не работает;
    • полнота переданного комплекта: разворачивается ли сайт из того, что передали, и чего не хватает;
    • наличие в коде посторонних вставок — веб-оболочек, скрытых точек входа, кода, скрытого кодированием, — и их отличие от штатных механизмов;
    • совпадения между двумя проектами за вычетом коробки, библиотек и сгенерированных файлов;
    • период, к которому относится спорное состояние, — по совокупности источников, а не по одной отметке времени;
    • объём собственного кода в файлах, строках или функциях — с оговоркой, что это ещё не стоимость.

    Эксперт не оценивает добросовестность сторон, не толкует условия договора и не определяет размер убытков: это вопросы права и, при необходимости, отдельной экономической экспертизы.

    Как проверяют соответствие заданию на развёрнутой копии

    Проверяют требование за требованием, а не общее впечатление. Из технического задания, приложений и переписки эксперт выбирает формулировки, допускающие проверку, и по каждой указывает способ: чтение кода, воспроизведение сценария на развёрнутой копии, сравнение с эталонной поставкой, анализ журналов. Требования, сформулированные оценочно — «удобный интерфейс», «современный дизайн», — прямой проверке не поддаются, и эксперт говорит об этом, а не подменяет критерий собственным вкусом.

    Особенность PHP здесь в том, что сайт почти всегда удаётся развернуть. Имея каталог файлов и выгрузку базы, эксперт поднимает копию в изолированной среде и проверяет требования на работающей системе, не трогая площадку. Но копия должна совпасть с оригиналом по окружению: версия самого PHP, состав включённых расширений, настройки сервера и режим отображения ошибок влияют на поведение сайта не меньше кода. Проект, написанный под PHP 7.4, на PHP 8 может отказать в местах, которые к спору отношения не имеют, — и наоборот, дефект проявится только на исходной версии. Поэтому окружение фиксируют наравне с кодом и описывают в заключении.

    Расхождение эксперт формулирует как факт, а не как обвинение: требование такое-то реализовано, реализовано частично или не реализовано; проверялось так-то; получен такой-то результат. Правовую оценку — существенный это недостаток или нет, исключает ли он приёмку — даёт суд. Если спор целиком укладывается в этот вопрос и язык для него значения не имеет, задачу закрывает экспертиза соответствия работ техническому заданию.

    Как считают объём работ и почему объём не равен деньгам

    Спор о деньгах почти всегда превращается в спор о том, что считать сделанным. На PHP это заметнее, чем на других языках: каталог сайта огромен, а доля собственного кода в нём мала.

    Считать «строки в каталоге» бессмысленно: в них попадут ядро коробочной системы, установленные Composer'ом библиотеки, сжатые стили и скрипты, словари переводов, загруженные пользователями файлы и автоматически сгенерированный код. Поэтому эксперт сначала вычитает всё перечисленное, а уже потом измеряет остаток — и описывает, что именно вычтено и на каком основании. Эта часть заключения обычно и оспаривается, поэтому границы должны быть проверяемыми: версия дистрибутива, файл блокировки версий, признаки генерации.

    Дальше — граница компетенции. Объём в строках, файлах или функциях — технический факт. Стоимость работ этим фактом не определяется: одна строка сложной интеграции и сто строк однотипной вёрстки несопоставимы по трудозатратам. Если спор о цене, вопрос о стоимости ставится отдельно и решается либо в рамках экспертизы объёма и стоимости работ, либо комплексной экспертизой с участием экономиста. Расчёт стоимости строят на этих цифрах, но делают его не здесь.

    Смежный вопрос — степень готовности: сколько из заказанного доведено до работающего состояния на спорную дату. Он решается на развёрнутой копии по перечню требований и рассматривается на странице экспертизы степени готовности программного обеспечения.

    Если репозитория нет, а всё выкладывали по FTP

    В проектах на PHP это встречается чаще, чем в любых других: сайт годами правили прямо на площадке, система контроля версий не велась, а весь след работ остался в мессенджере. Целиком историю тогда не восстановить, но и безнадёжной задача не будет — просто источники другие, и каждый из них слабее записи в репозитории.

    Что даёт материал для реконструкции: резервные копии хостинг-провайдера — их хранят ограниченный срок, у массовых тарифов обычно от нескольких дней до месяца, и именно поэтому запрашивать их нужно немедленно; журналы FTP-сервера и панели управления, где видно, кто и когда загружал файлы; журналы веб-сервера, показывающие, с какой даты страница начала отвечать; почтовая переписка с вложениями и датами отправки; счета и акты хостинг-провайдера, привязывающие площадку к периоду; архивные копии страниц в общедоступных архивах интернета. Поодиночке ни один источник вопроса не решает, но их совпадение даёт обоснованный вывод о периоде.

    Если спор именно о датах — когда работы фактически велись и укладывались ли они в согласованные сроки, — его разбирает экспертиза сроков и хронологии разработки; здесь датировка нужна для привязки спорного состояния кода к периоду.

    Отметку времени файла эксперт здесь использует осторожно и всегда с оговоркой: её задают произвольно штатной командой; на Linux и macOS обычное копирование ставит дату копирования, а после переноса на другой хостинг у всего каталога нередко оказывается одна и та же дата. В Windows штатное копирование дату изменения, наоборот, сохраняет — поэтому вывод зависит от того, каким путём файл попал в исследуемую копию, и этот путь должен быть описан. Мешает и обратное: при распаковке отметка обычно восстанавливается из архива, то есть выглядит достоверной, хотя ничего не подтверждает. Есть у файловой системы и вторая отметка — времени изменения сведений о файле. Штатной командой её назад не переводят, поэтому расхождение между двумя отметками уже бывает признаком того, что дату правили. Живёт эта отметка только до копирования, поэтому и важно, чтобы копию снимали архивом и с описью. Вывод на одной дате изменения не устоит: рецензент это заметит.

    Закрытый код и посторонние вставки: как их различают

    В PHP есть два разных явления, которые внешне выглядят одинаково — как нечитаемый текст, — но означают противоположное, и путать их нельзя.

    Первое — коммерческая защита. Подрядчик пропускает часть файлов через энкодер — средство, которое чаще других в спорах встречается ionCube PHP Encoder, — и текст программы превращается в нечитаемый вид. На сервере такие файлы работают только при установленном дополнительном расширении, а нередко и при действующей лицензии. Встречается и Zend Guard, но им закрывали код старых проектов: на PHP 7 и более поздние версии его не переносили. С точки зрения спора это существенно: заказчик получил работающий сайт, но не получил исходного кода той части, которая закрыта, и не может ни доработать её сам, ни передать другому подрядчику. Эксперт устанавливает, какие файлы закрыты, каким средством, какую долю функциональности они покрывают и что именно перестаёт работать при истечении лицензии или переносе на сервер без нужного расширения. Восстановить исходный текст из такого файла эксперт не пытается: это и технически ненадёжно, и выходит за пределы задачи.

    Второе — следы постороннего вмешательства. Веб-оболочка, дающая злоумышленнику управление сайтом, — это обычно одна короткая строка, исполняющая присланный текст; её прячут в шаблоне темы или в загруженном изображении. Эксперт отличает такую вставку от штатной защиты по нескольким признакам: месту расположения, отсутствию в эталонной поставке, характеру кода, времени появления относительно журналов веб-сервера. Через какую уязвимость и когда вошли, установить можно — если сохранились журналы; при их отсутствии эксперт ограничивается фиксацией самих вставок и прямо говорит о невозможности определить момент.

    В спорах о взломанном сайте это разделение обычно и есть предмет: одна сторона утверждает, что дыру оставил разработчик, другая — что сайт не обслуживали и не обновляли. Оба утверждения проверяемы, но по разным материалам, и вопросы суду стоит формулировать раздельно.

    Если доступы удерживает подрядчик

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

    Экспертиза иска не заменит, но часть неясностей снимет. Эксперт может зафиксировать состав того, что фактически передано, и установить, достаточно ли этого для самостоятельной работы с сайтом: разворачивается ли он из переданного, полны ли настройки, не закрыта ли часть кода энкодером, есть ли в нём привязка к площадке подрядчика — обращения к его серверам, ключи его учётных записей, механизмы удалённого отключения. Сведения о том, на кого оформлены домен и хостинг, эксперт берёт из документов, представленных сторонами или истребованных судом: в общедоступной справке по доменам зоны .RU данные владельца-физического лица не раскрываются, а самостоятельно собирать материалы эксперт не вправе.

    Чего эксперт не делает: не получает доступ в обход владельца площадки, не восстанавливает пароли и не работает с системой без законного основания. Если материалов нет и получить их можно только у другой стороны или у хостинг-провайдера, правильный путь — ходатайство об их истребовании. В нём указывают само доказательство, обстоятельства дела, которые оно может подтвердить или опровергнуть, причины, мешающие получить его самостоятельно, и место, где оно находится: без любого из этих пунктов ходатайство обычно отклоняют.

    Какие объекты исследуются на площадке с PHP

    Перечень зависит от вопросов, но по PHP набор устойчив. Он делится на две части.

    Код, поставка и площадка

    Основной материал — то, из чего сайт состоит и на чём работает:

    • каталог сайта целиком, включая скрытые файлы и файлы настроек;
    • описание зависимостей и файл блокировки версий, каталог установленных пакетов;
    • дистрибутивы использованной коробочной системы, модулей и тем той же версии — для сравнения с поставкой;
    • репозиторий системы контроля версий — чаще всего Git — с полной историей, если она велась: со всеми ветками, метками и записями об изменениях;
    • настройки веб-сервера Apache или nginx и самого PHP: конфигурация, правила обработки адресов, список включённых расширений, версия;
    • выгрузка базы данных MySQL, MariaDB или PostgreSQL: значительная часть логики сайтов на коробочных системах хранится не в файлах, а в таблицах настроек и в содержимом.

    Следы работы и документы

    Материал, по которому восстанавливают ход событий и требования:

    • журналы веб-сервера, FTP и панели управления хостингом за спорный период;
    • журналы ошибок PHP и журналы самой коробочной системы;
    • резервные копии за период до спора — у хостинг-провайдера или у заказчика;
    • техническое задание, приложения, акты, переписка сторон, задачи в системе учёта;
    • лицензии на коробочную систему, платные модули и шаблоны с датами приобретения.

    Что сохранить, пока площадка не изменилась

    Главный объект здесь — работающая площадка, а не архив на диске; от этого и порядок действий. Сохранять нужно её состояние целиком и до того, как кто-либо что-то поправит.

    Копируйте только своё или то, к чему у вас есть законное право доступа. К чужим системам — только по решению суда или иного уполномоченного органа. Если домен, хостинг или пароли оформлены на подрядчика, самостоятельный доступ к площадке недопустим, а нужные материалы запрашивают через суд.

    Минимум такой:

    • снимите каталог сайта архивом, а не простым копированием: архив сохраняет вложенность, скрытые файлы и даты изменения, а копирование их теряет — на Linux и macOS обычное копирование ставит всем файлам сегодняшнее число. Заодно выгрузите базу данных; если доступ есть только к панели управления хостингом, сделайте резервную копию сайта её штатными средствами и скачайте архив;
    • сохраните опись: перечень файлов с размерами и датами изменения на момент снятия. Она нужна, чтобы позже было видно, что именно вы взяли и в каком состоянии;
    • уберите архив туда же, где храните бухгалтерию: в нём лежат действующий пароль к базе, ключи платёжных систем и персональные данные клиентов. И это не для вида: выгрузка клиентской базы «на всякий случай: утечка этого архива хуже, чем спор, ради которого он снят;
    • запросите у хостинг-провайдера письмом все резервные копии за прошедшие периоды — их хранят ограниченный срок, у массовых тарифов это обычно от нескольких дней до месяца, и старые затираются новыми;
    • скачайте журналы веб-сервера, FTP и панели управления за весь доступный период;
    • зафиксируйте окружение: версию PHP, список расширений, версию и настройки веб-сервера — снимком экрана панели управления хостингом или письмом от хостинг-провайдера. Не создавайте для этого новых файлов на спорной площадке: диагностическая страница показывает пути и переменные окружения вместе с паролями и ключами, доступна всем, кто знает адрес, и сама становится изменением в том каталоге, который вы сохраняете;
    • посчитайте контрольную сумму каждого архива и запишите её отдельным документом. Контрольная сумма — это короткая строка, которую вычисляют из содержимого файла: изменится в файле хоть один знак, изменится и она, поэтому записанная сегодня сумма позволяет завтра доказать, что архив не подменяли. В Windows её считает PowerShell командой Get-FileHash архив.zip -Algorithm SHA256, в обычной командной строке — certutil -hashfile архив.zip SHA256; в Linux — sha256sum архив.zip, в macOS — shasum -a 256 архив.zip;
    • составьте короткую записку: что именно скачано, с какого адреса и сервера, когда, под какой учётной записью, кто присутствовал.

    Список технический — так и должно быть: выполнять его должен тот, у кого есть доступ к площадке, — ваш системный администратор, штатный разработчик или сотрудник хостинг-провайдера по вашей заявке. Если единственный такой человек — тот самый подрядчик, с которым идёт спор, поручать это ему не нужно: обращайтесь напрямую к хостинг-провайдеру, доступ к площадке принадлежит владельцу договора. Если такого человека нет, не экспериментируйте с работающим сайтом: позвоните по номеру 8 (800) 333-24-09, и мы подскажем порядок под вашу площадку. Красиво делать не нужно — нужно успеть, пока каталог не изменился.

    Пока состояние не зафиксировано, не выкладывайте исправленную версию, не переносите сайт на другой хостинг, не обновляйте коробочную систему и модули, не чистите журналы и не сокращайте срок их хранения, не удаляйте резервные копии. Смену паролей и ключей доступа планируйте так: сначала копия, сразу за ней — смена. Это правило отменяется, если доступ злоумышленника не прекращён и ущерб растёт: тогда прекращение доступа важнее чистоты копии. Порядок в этом случае обратный — снимите копию тем, что успеваете, затем смените пароли и ключи и завершите все сеансы, а закрывать сайт лучше снаружи, средствами хостинга или веб-сервера. Встроенный в систему режим обслуживания для этого не годится: он не мешает обращаться напрямую к постороннему файлу, не закрывает доступ по FTP и к панели, не отменяет заданий по расписанию — и сам по себе меняет спорное состояние. Всё, что вы сделали, и время каждого действия запишите: изменения, о которых эксперт знает, он учтёт, а о которых не знает — нет.

    Это не значит, что бизнес должен встать. Если сайт уже пришлось срочно чинить или восстанавливать после взлома, требование «ничего не трогать» задним числом бессмысленно: зафиксируйте нынешнее состояние, сохраните всё, что осталось от прежней версии, и запишите, что и когда вы меняли при восстановлении. После этого сайт обслуживают штатно, включая обновления безопасности.

    Копия, которую вы сняли сами, доказывает меньше, чем кажется: другая сторона вправе сказать, что архив собран уже после спора. Усиливают её посчитанные сразу контрольные суммы, независимый источник той же копии — резервная копия хостинг-провайдера, — и, при высокой цене вопроса, обеспечение доказательств: до обращения в суд — нотариальное обеспечение доказательств; в арбитражном процессе суд вправе принять меры по обеспечению доказательств и до предъявления иска, по заявлению заинтересованного лица; по возбуждённому делу подают ходатайство об обеспечении доказательств.

    Как передать копию сайта и не раскрыть лишнего

    Каталог сайта на PHP почти всегда содержит то, что не должно попасть в чужие руки: файл настроек с паролем к базе данных, ключи платёжных систем, персональные данные клиентов в выгрузке базы. Вычищать их из копии нельзя: это изменит объект исследования, и другая сторона справедливо на это укажет. Порядок здесь другой.

    Материалы передают в исходном виде, но по защищённому каналу и с ограниченным кругом лиц, а всё, что в копии открывает доступ, после передачи меняют: пароль к базе данных, ключи внешних сервисов и платёжных систем, а также служебные ключи подписи, которыми система заверяет сеансы пользователей, — иначе тот, у кого есть архив, сможет войти в административную часть под чужой учётной записью. Одновременно завершают все активные сеансы и принудительно меняют пароли привилегированных учётных записей: их защищённые представления лежат в выгрузке базы, а материалы, поступившие в суд, доступны сторонам. Старые значения остаются в архиве как часть объекта, но перестают что-либо открывать. Срок хранения переданных материалов, порядок их возврата или уничтожения согласуйте заранее и зафиксируйте в договоре.

    Если в базе есть персональные данные клиентов, объём выгрузки согласуют до отправки и по возможности ограничивают таблицами, относящимися к спору. Основание при этом разное: по судебной экспертизе обработка нужна для осуществления правосудия и отдельного согласия клиентов не требует, а при внесудебном исследовании по договору основание придётся определять вместе со своим юристом — процессуальной обязанности там нет. Это не формальность: выгрузка клиентской базы «на всякий случай» создаёт самостоятельный риск для вас как оператора.

    Эксперта соглашение о конфиденциальности связывает, стороны — нет: то, что попало в суд, они увидят. и это учитывают при выборе объёма. Куда и как передавать — защищённое хранилище, носитель с описью или доступ по согласованному каналу — предложим при первом обращении, до того как вы что-либо отправите.

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

    Порядок исследования сайта на PHP

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

    1. Принимаются материалы, фиксируется их состав и контрольные суммы; описывается, откуда и когда получена каждая копия.
    2. Определяются коробочная система, её версия и состав модулей; подбираются эталонные дистрибутивы тех же версий.
    3. Каталог сайта сопоставляется с эталонной поставкой; выделяются совпавшие, изменённые и посторонние файлы.
    4. Сайт разворачивается в изолированной среде с воспроизведением исходного окружения — версии PHP, расширений, настроек сервера.
    5. По каждому проверяемому требованию выполняется проверка выбранным способом; результат фиксируется вместе с условиями получения.
    6. Проверяются альтернативные объяснения обнаруженного: настройки среды, действия третьих лиц, данные, внесённые пользователями.
    7. Формулируются выводы в пределах поставленных вопросов; перечисляются ограничения и то, что установить не удалось.

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

    Примеры вопросов эксперту по коду на PHP

    Годный вопрос называет две вещи: объект и проверяемый критерий. Объект по PHP — это адрес площадки и дата снятия копии либо конкретный архив с контрольной суммой; критерий — пункт технического задания или иной документ. При судебной экспертизе окончательный круг вопросов определяет суд, а в иных предусмотренных законом процедурах — орган или лицо, назначившие экспертизу: эксперт отвечает в пределах специальных знаний и представленных материалов и при неясности вопроса сообщает об этом назначившему органу, а помощь с формулировками возможна до назначения.

    Ниже — примеры формулировок; подробные перечни под конкретные задачи собраны на страницах экспертизы качества исходного кода и экспертизы плагиата исходного кода.

    1. Соответствует ли программное обеспечение, содержащееся в архиве с контрольной суммой SHA-256 …, требованиям пунктов … технического задания (приложение № … к договору от …)?
    2. Какая система управления содержимым и какой версии использована; какие файлы каталога сайта совпадают с эталонной поставкой этой версии, какие изменены и какие в поставке отсутствуют?
    3. Какой объём программного кода в архиве … создан вне состава коробочной поставки и подключённых через Composer библиотек?
    4. Содержится ли в файлах сайта программный код, не относящийся к штатной работе системы управления содержимым и обеспечивающий выполнение произвольных команд?
    5. Имеются ли в файлах архива … и архива … совпадения программного кода, не объясняемые использованием одной коробочной системы, общих библиотек и типовых конструкций языка?
    6. Позволяет ли комплект, переданный по акту от …, развернуть работоспособную копию сайта; если нет — каких компонентов недостаточно?

    Форматы работы: суд, досудебная стадия, рецензия

    Форматов несколько, и выбирают их по стадии спора:

    • судебная экспертиза по определению суда или постановлению органа расследования — с предупреждением эксперта об уголовной ответственности за заведомо ложное заключение;
    • внесудебное исследование по договору со стороной — до подачи иска или параллельно с ним;
    • письменная консультация по материалам, когда нужно понять перспективу и правильно поставить вопросы;
    • участие специалиста в судебном заседании для пояснений по проведённому исследованию;
    • рецензирование чужого заключения — подробнее на странице рецензии на заключение о процессе разработки.

    После назначения судебной экспертизы правила общения меняются, и по спорам о сайтах это чувствуется особенно: у стороны обычно остаётся доступ к площадке, и возникает соблазн дослать эксперту свежую выгрузку или журнал напрямую. Так делать нельзя. Назначенный эксперт не принимает материалы от одной стороны и не даёт ей частных оценок по существу поручения: доступ, вопросы и всё новое идут через суд или орган расследования. Если специалист раньше работал для одной из сторон, это раскрывают при рассмотрении его кандидатуры; решение о назначении и об отводе принимает назначивший орган.

    От чего зависят стоимость и срок по проекту на PHP

    Решают три обстоятельства, и первые два специфичны именно для PHP. Первое — сколько слоёв придётся разделять: сайт на коробочной системе с двумя десятками модулей требует сопоставления с эталонными поставками каждого из них, и это самостоятельная работа, которой нет у проекта, написанного с нуля. Второе — уцелело ли окружение: если известны версия PHP, состав расширений и настройки сервера, копия поднимается за часы; если сайт уже перенесён, а прежняя площадка недоступна, восстанавливать среду придётся отдельно, и получится не всегда. Третье — есть ли история изменений: репозиторий с ветками и метками отвечает на вопрос о датах сразу, а его отсутствие означает реконструкцию по журналам, резервным копиям и переписке. Дальше как везде: объём спорной части, число проверяемых требований, количество вопросов и необходимость смежных специалистов. Ориентир для судебной экспертизы — от 100 000 ₽, ориентировочный срок — 10 рабочих дней; точные условия определяются после просмотра материалов.

    Начинать с архивов не нужно. Назовите программу, опишите спор и перечислите, что у вас есть: договор, задание, переписка, доступы к репозиторию. — договор, задание, переписка, доступы. Позвоните по номеру 8 (800) 333-24-09 или оставьте заявку: мы скажем, относится ли задача к нашей компетенции, какое направление её закрывает, что стоит сохранить прямо сегодня и каких данных не хватает для расчёта стоимости.

    Проведение экспертизы по уголовному делу

    Судебная экспертиза по уголовному делу производится государственными судебными экспертами и иными экспертами из числа лиц, обладающих специальными знаниями.

    Негосударственными судебно-экспертными учреждениями постановление Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам» признаёт некоммерческие организации, созданные в соответствии с Гражданским кодексом Российской Федерации и Федеральным законом «О некоммерческих организациях» и осуществляющие судебно-экспертную деятельность в соответствии с принятыми ими уставами.

    По сведениям организации, проведение судебных экспертиз предусмотрено её уставом (см. действующую редакцию в разделе «Документы организации»). Это само по себе не означает автоматического поручения любой экспертизы. Возможность поручить конкретное исследование определяет назначающий орган с учётом предмета дела, квалификации эксперта, оснований для отвода и действующего перечня экспертиз, выполняемых только государственными судебно-экспертными организациями.

    Актуализировано
    Форматы работы

    Стоимость и сроки

    Указан предварительный ориентир. Точный расчёт зависит от вопросов, объёма материалов, количества объектов и необходимости выезда. Начало отсчёта фиксируем после проверки необходимого комплекта.

    По договору

    Внесудебное исследование

    от 100 000 ₽
    10 рабочих дней
    точная стоимость будет определена после ознакомления с объектом исследования

    Итог — внесудебное исследование или документ специалиста по договору. Его наименование, представление и доказательственное значение зависят от вида процесса и оцениваются судом.

    Заказать исследование
    Проверка готового заключения

    Рецензирование

    от 40 000 ₽
    10 рабочих дней
    точная стоимость будет определена после ознакомления с заключением и приложениями

    Итог — письменная рецензия на готовое заключение. Она проверяет исходные данные, методы и выводы, но не отменяет заключение и не заменяет новое исследование объекта.

    Передать заключение на проверку
    Письменный ответ эксперта

    Консультация и справка

    от 20 000 ₽
    2-3 рабочих дня
    точная стоимость будет определена после ознакомления с объектом исследования

    Поможет предварительно оценить вопрос, определить перспективу исследования и подготовить дальнейшие действия.

    Описать вопрос
    Разбор задачи — без оплаты

    Проверим вид исследования, комплектность материалов и возможность работы. Если по присланным материалам видно, что ответить нельзя, скажем сразу и работу не возьмём. Когда материалы структурированы, предварительный прогноз тоже бесплатный; если разбор требует долгой работы эксперта, предупредим об этом до начала — тогда это платная консультация.

    Получить предварительную оценку
    Организация исследования

    Как строится работа над экспертизой

    До начала исследования уточним предмет задачи, состав материалов и формат итогового документа.

    1. 01 Предварительный разбор

      Проверяем компетенцию и сообщаем, можно ли провести исследование по поставленной задаче.

    2. 02 Вопросы и материалы

      Уточняем вопросы и сообщаем, каких документов или объектов не хватает.

    3. 03 Экспертное исследование

      Эксперт применяет профильные методики, фиксирует ход работы и обосновывает выводы.

    4. 04 Заключение и пояснения

      Передаём результат и при необходимости разъясняем суду применённую методику и выводы.

    Выполненные исследования

    Практика по этому направлению

    Краткие описания задач с указанием суда и ссылкой на опубликованные материалы дела. Формулировки взяты из карточек дел и воспроизводят вопросы, поставленные назначившим органом: они показывают, что исследовалось, а не то, какие вопросы можно поручить эксперту. Виновность, принадлежность прав и обоснованность требований разрешает суд.

    Все примеры по направлению
    Опубликованный пример
    Завершена в декабре 2023 года

    Экспертиза №146684

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

    Арбитражный суд Архангельской областиДело №А05-12316/2022
    Участники: ООО "Компания ЭКСПЕРТ",

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, проведенная с целью выявления недостатков и ошибок в разработанном продукте, а также оценки стоимости их устранения. В рамках исследования было осуществлено развертывание предоставленного программного обеспечения в изолированной виртуальной среде, включающей операционную систему Linux Ubuntu и необходимую программную инфраструктуру. Эксперты провели анализ структуры файлов, исходного кода и попытки запуска системы, столкнувшись с необходимостью устранения выявленных ошибок развертывания и настройки базы данных. В связи с критическими недочетами, препятствующими полноценному доступу к функционалу, дополнительно были изучены видеоматериалы тестового обследования, предоставленные сторонами, для формирования комплексного заключения о состоянии программного обеспечения.
    Открыть описание
    Опубликованный пример
    Завершена в августе 2023 года

    Экспертиза №133626

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

    Арбитражный суд Архангельской областиДело №А05-12316/2022
    Участники: ООО "Компания ЭКСПЕРТ", ИП Антипин А.В.

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, направленная на установление соответствия разработанного продукта условиям договора и техническому заданию, а также на оценку фактически выполненных работ. Эксперты провели анализ исходного кода, написанного на языках PHP и JavaScript, а также сопутствующей документации и электронной переписки сторон. Целью было определить наличие недостатков и рассчитать стоимость их устранения, используя методы комплексного анализа предоставленной цифровой информации и договорных обязательств.
    Открыть описание
    Опубликованный пример
    Завершена в октябре 2021 года

    Экспертиза №109333

    Судебная компьютерно-техническая экспертиза была проведена для всесторонней оценки разработанной программы для ЭВМ, представленной в виде интернет-сайта по продаже автомобилей.

    Арбитражный суд Республики БашкортостанДело №А07-1128/2019
    Участники: ООО "КАСКАД-АВТО", ООО "АРТ-МОТОРС ЮГ"

    Аннотация

    Судебная компьютерно-техническая экспертиза была проведена для всесторонней оценки разработанной программы для ЭВМ, представленной в виде интернет-сайта по продаже автомобилей. Основными задачами являлись идентификация частей программы, подлежащих авторско-правовой охране, а также оценка оригинальности творческих решений, примененных при ее создании. Исследователям предстояло определить, какой объем HTML-кода сайта является результатом интеллектуальной деятельности и подлежит защите. Проведение экспертизы включало детальный анализ программного кода, логической и визуальной структуры сайта, а также изучение сопроводительных материалов, предоставленных на физическом носителе. Выполненные работы позволили определить степень уникальности и авторского вклада в создание веб-ресурса. Исследование проходило с применением методов анализа исходного кода и графической фиксации, основываясь на нормах гражданского законодательства об интеллектуальной собственности.

    Открыть описание
    Опубликованный пример
    Завершена в августе 2021 года

    Экспертиза №104276

    Судебная компьютерно-техническая экспертиза была проведена для изучения программного обеспечения «Right Way» и его исходного кода.

    Арбитражный суд г. МосквыДело №А40-310870/2019
    Участники: АО "Модный континент", ООО "Ланит ОМНИ"

    Аннотация

    Судебная компьютерно-техническая экспертиза была проведена для изучения программного обеспечения «Right Way» и его исходного кода. Основной целью являлось установление механизмов информационной рассылки и принципов работы фильтрации номеров карт. Эксперты выполнили анализ пользовательской документации, провели экспериментальное тестирование функционала системы, а также осуществили исследование исходного кода и истории его изменений в репозитории. Особое внимание уделялось выявлению реакции программы на некорректный ввод данных в фильтр «Список карт» и анализу возможности внесения изменений в код без фиксации в системе контроля версий. В процессе экспертизы устанавливались причины непредвиденного поведения системы при обработке списков получателей сообщений.

    Открыть описание
    Опубликованный пример
    Завершена в ноябре 2016 года

    Экспертиза №28496

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

    Арбитражный суд Алтайского краяДело №А03-514/2016
    Участники: Алтайское региональное отделение Фонда социального страхования РФ, Администрация Калининского сельсовета Бийского района АК

    Аннотация

    Судебная компьютерно-техническая экспертиза проведена с целью комплексного анализа электронной информации, связанной с публикацией важного корпоративного документа на веб-сайте. В рамках исследования эксперты устанавливали дату и время загрузки файла с сообщением о проведении внеочередного общего собрания акционеров на различные серверы, а также определяли период доступности публичной ссылки на этот документ для пользователей сети Интернет. Было выполнено сравнение нескольких версий файла, существовавших на разных хостингах до и после миграции сайта, для проверки их идентичности и выявления фактов модификации. Применялись методы цифровой криминалистики: анализ метаданных файлов, исследование серверных логов, анализ баз данных сайта, трассировка сетевых маршрутов и побайтовое сравнение данных, что позволило детально восстановить хронологию событий и подтвердить целостность информации.

    Открыть описание
    В открытом доступе представлена часть выполненных исследований по разным объектам и судебным делам. Сведения, защищённые законом или условиями конфиденциальности, не раскрываются. Чтобы проверить возможность исследования по вашей ситуации, опишите задачу.

    Документы организации

    Ответы специалистов

    Частые вопросы

    Практические пояснения о назначении, материалах и использовании экспертного заключения.

    Все вопросы по направлению
    Когда нужна экспертиза исходного кода на PHP?

    Исследование нужно там, где спор упирается в проверяемое состояние сайта, а не только в толкование договора. Типичные поводы: подрядчик сдал работу, а заказчик считает техническое задание невыполненным; стороны расходятся в объёме сделанного; после расторжения договора передали архив, который не разворачивается; на сайте появился посторонний код и обсуждается, чья это зона ответственности; нужно установить, когда появились спорные файлы.

    Отдельный повод — проверка чужого заключения. Если по делу уже проведена экспертиза и её выводы вызывают сомнения, разбирают не сайт, а сам документ: полноту описания объектов, происхождение копии, обоснованность выводов.

    Не подойдёт экспертиза там, где вопрос правовой: были ли работы приняты, существенны ли недостатки, кто виноват в срыве сроков. Эксперт устанавливает факты, а оценку им даёт суд.

    Отдельная страница: Когда нужна экспертиза исходного кода на PHP?
    Какие системы и каркасы охватывает экспертиза кода на PHP?

    Исследуются проекты на любых распространённых основаниях. Это коробочные системы управления содержимым — «1С-Битрикс», WordPress, Joomla, Drupal, MODX, — торговые платформы вроде OpenCart и Magento, каркасы разработки Laravel, Symfony и Yii, а также самописные движки без внешней основы. Отдельная категория — проекты, выросшие из коробки: система стоит, но переписана настолько, что сравнение с поставкой само по себе становится задачей.

    Сопутствующее окружение тоже входит в объект: веб-сервер Apache или nginx, база данных MySQL, MariaDB или PostgreSQL, кеш, очереди, контейнеры. Поведение сайта зависит от них не меньше, чем от кода, поэтому конфигурацию фиксируют и воспроизводят при развёртывании копии.

    Знать заранее, что именно использовано, не обязательно: состав определяется по файлам проекта. Для исследования достаточно каталога сайта и выгрузки базы данных; при первом обращении присылать их не нужно.

    Отдельная страница: Какие системы и каркасы охватывает экспертиза кода на PHP?
    Чем экспертиза кода на PHP отличается от экспертизы сайта?

    Разные объекты. Экспертиза сайта отвечает на вопрос, что было опубликовано по адресу и работает ли ресурс: объект — то, что видит посетитель, и состояние на конкретный момент. Такие задачи закрывает экспертиза веб-сайтов.

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

    Один спор часто требует обеих задач: зафиксировать опубликованное и разобрать код. Тогда их объединяют в одном исследовании, но вопросы формулируют раздельно — иначе в заключении смешиваются разные объекты и разные методы.

    Отдельная страница: Чем экспертиза кода на PHP отличается от экспертизы сайта?
    Как отделить работу подрядчика от коробочной системы и модулей?

    Сравнением с эталонной поставкой. Дистрибутивы систем управления содержимым и модулей публикуются с указанием версий, поэтому эксперт определяет версию установленной системы, берёт официальный дистрибутив той же версии и сопоставляет с ним каталог сайта пофайлово.

    Получаются три группы. Совпавшие с поставкой — не работа подрядчика; сравнение при этом ведут с приведением к единому виду, иначе разница в переводах строк после выкладки по FTP завысит долю подрядчика. Файлы поставки, изменённые на площадке, требуют разбора: правка могла быть согласованной доработкой, а могла быть вмешательством в файлы самой системы, которое её документация запрещает и которое ломает обновления; согласовывались такие работы или нет, устанавливает суд. Файлы, отсутствующие в поставке, — кандидаты в собственный код, но среди них попадаются и скопированные в проект чужие библиотеки.

    Такое разделение даёт цифру, и оспаривают обычно её. Поэтому в заключении указывают версию дистрибутива, источник его получения и признаки, по которым файл отнесён к той или иной группе.

    Отдельная страница: Как отделить работу подрядчика от коробочной системы и модулей?
    Как установить состав библиотек Composer в проекте на PHP?

    По двум файлам в корне проекта. Описание проекта перечисляет объявленные зависимости и допустимые диапазоны версий, а файл блокировки фиксирует точный набор установленных пакетов, включая косвенные, с версиями и указанием источника, из которого каждый получен. Вместе они позволяют восстановить состав библиотек на дату, к которой относится копия.

    Каталог с установленными пакетами по объёму часто превосходит остальной проект. Считать его работой подрядчика нельзя, но и вовсе игнорировать неверно: подобрать библиотеки и вовремя их обновлять — тоже труд, который оценивается отдельно от строк кода.

    Условия использования каждой библиотеки указаны в её описании. Эксперт устанавливает, какая лицензия сопровождает пакет и какие требования она содержит; правовую оценку соблюдения этих условий даёт суд.

    Отдельная страница: Как установить состав библиотек Composer в проекте на PHP?
    Сайт не работает после смены версии PHP: код или окружение?

    Проверяется и то и другое, причём раздельно. Сначала эксперт определяет, под какую версию языка написан код: по используемым конструкциям, по объявленным в описании зависимостей требованиям, по обращениям к функциям, которые в поздних версиях удалены. Затем устанавливает, на какой версии код фактически исполнялся на спорной площадке.

    Переходы между версиями меняли поведение существенно. На PHP 7 исчезло старое расширение для работы с базой данных и изменилась обработка ошибок; на PHP 8 обращение к несуществующей переменной или ключу стало предупреждением, а сравнение строки с числом изменило результат — и вот это опаснее всего для спора, потому что не даёт ни ошибки, ни записи в журнале. Поэтому отказ после смены версии — не обязательно дефект кода, а работоспособность на старой версии не означает соответствия заданию.

    Вывод формулируется через требование: если версия названа в техническом задании или в договоре на сопровождение, несоответствие ей проверяемо. Утверждение «версия устарела» без такой привязки остаётся оценочным.

    Отдельная страница: Сайт не работает после смены версии PHP: код или окружение?
    Репозитория нет, выкладывали по FTP: как установить даты?

    Частично. Полной картины, какую даёт система контроля версий, не будет, но период обычно удаётся обосновать по совокупности источников. Работают резервные копии хостинг-провайдера за прошедшие периоды, журналы FTP-сервера и панели управления с записями о загрузке файлов, журналы веб-сервера, показывающие, с какой даты страница начала отвечать, переписка с вложениями и датами, счета хостинг-провайдера, архивные копии страниц в общедоступных архивах интернета.

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

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

    Отдельная страница: Репозитория нет, выкладывали по FTP: как установить даты?
    Можно ли по дате изменения файла установить, когда написан код?

    Сама по себе — нет. Время изменения файла хранится в файловой системе и задаётся произвольно штатными средствами, без каких-либо специальных инструментов. Кроме того, на Linux и macOS обычное копирование ставит дату копирования, а в Windows штатное копирование её сохраняет: после смены хостинга у всего каталога нередко оказывается одна и та же отметка, не имеющая отношения к разработке. Обратный случай не лучше: при распаковке архива отметка восстанавливается из него и выглядит достоверной, хотя подтверждает лишь то, что было записано в архив.

    Это не значит, что отметка бесполезна. Она принимается как один из признаков и получает вес, когда согласуется с независимыми источниками: записями журналов о загрузке файла, датой резервной копии, в которой он впервые появился, перепиской о передаче работы.

    Вывод, построенный только на времени изменения файла, неустойчив, и рецензент это отметит. В заключении такое ограничение указывают прямо, а не умалчивают.

    Отдельная страница: Можно ли по дате изменения файла установить, когда написан код?
    Сайт взломали — можно ли установить, через что и когда?

    Обычно да — при условии, что сохранились журналы. Эксперт находит посторонние файлы и вставки, сопоставляя каталог сайта с эталонной поставкой системы и модулей: то, чего в поставке нет и что не относится к работе подрядчика, выделяется в отдельную группу. Затем по журналам веб-сервера прослеживаются обращения к этим файлам и запросы, которыми они были созданы.

    Так восстанавливается и способ проникновения: загрузка файла через форму без проверки типа, уязвимость в устаревшем модуле, подбор пароля к административной части, доступ через учётные данные подрядчика.

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

    Отдельная страница: Сайт взломали — можно ли установить, через что и когда?
    Часть кода закрыта ionCube: что можно исследовать?

    Устанавливается всё, кроме содержимого закрытых файлов. Эксперт определяет, какие именно файлы закрыты и каким энкодером — чаще всего это ionCube PHP Encoder, у старых проектов встречается Zend Guard, который на PHP 7 и позже не переносили, — какую долю проекта они составляют, какие функции сайта на них завязаны и что перестаёт работать при истечении лицензии или отсутствии нужного расширения на сервере.

    Этого обычно достаточно для спора: заказчик получил работающий сайт, но не получил исходного кода той части, которая закрыта, и не может ни доработать её сам, ни передать другому подрядчику. Факт закрытия и его последствия — проверяемые обстоятельства.

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

    Отдельная страница: Часть кода закрыта ionCube: что можно исследовать?
    Архив не разворачивается: что установит эксперт?

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

    Важно отделить нехватку материалов от несовместимости окружения. Сайт может не запускаться просто потому, что в изолированной среде другая версия языка или не включено нужное расширение, — это не недостаток переданного комплекта. Поэтому окружение воспроизводят по данным со спорной площадки и описывают в заключении.

    Результат формулируется как перечень отсутствующих компонентов с указанием, что именно без каждого из них не работает. Правовую оценку — исполнено ли обязательство по передаче — даёт суд.

    Отдельная страница: Архив не разворачивается: что установит эксперт?
    Подрядчик удерживает доступы к сайту: чем поможет экспертиза?

    Экспертиза не заменяет иска, но снимает часть неопределённости. Эксперт фиксирует состав фактически переданного и проверяет, достаточно ли этого для самостоятельной работы: разворачивается ли сайт, полны ли настройки, не закрыта ли часть кода энкодером, нет ли в проекте привязки к площадке подрядчика — обращений к его серверам, ключей его учётных записей, механизмов удалённого отключения.

    Сведения о том, на кого оформлены домен и хостинг, берут из документов сторон или истребуют через суд: в общедоступной справке по доменам зоны .RU данные владельца-физического лица не раскрываются.

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

    Отдельная страница: Подрядчик удерживает доступы к сайту: чем поможет экспертиза?
    Заимствование кода на PHP или совпадение из-за коробки?

    Вычитанием общего основания. На сайтах, собранных на одной коробочной системе, совпадения неизбежны и сами по себе ничего не доказывают: ядро, стандартные модули, установленные Composer'ом библиотеки, сгенерированные каркасом файлы, результат автоматического форматирования кода — всё это будет одинаковым у независимых разработчиков.

    Поэтому из сравнения сначала исключают всё перечисленное, а затем сопоставляют только остаток. Значимыми считают совпадения, которые невозможно объяснить общим основанием: одинаковые опечатки и комментарии, идентичные имена служебных переменных, повторяющаяся структура нестандартных решений, следы одного и того же пути разработки в конфигурации.

    Каждое такое совпадение проверяется вручную, а не принимается по проценту сходства, выданному инструментом. Развёрнуто эта задача разбирается на странице экспертизы плагиата исходного кода.

    Отдельная страница: Заимствование кода на PHP или совпадение из-за коробки?
    Как считают объём работ по сайту на PHP?

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

    Полученная величина — технический факт, а не сумма. Строка сложной интеграции с платёжной системой и сотня строк однотипной вёрстки несопоставимы по трудозатратам, поэтому объём сам по себе стоимость не определяет.

    Если спор о деньгах, вопрос о стоимости ставят отдельно: его решает экспертиза объёма и стоимости работ, при необходимости с участием экономиста. Расчёт стоимости строят на этих цифрах, но делают его не здесь.

    Отдельная страница: Как считают объём работ по сайту на PHP?
    Какие материалы нужны для экспертизы кода на PHP?

    Основной комплект: полная копия каталога сайта вместе со скрытыми файлами и файлами настроек, выгрузка базы данных, описание зависимостей и файл блокировки версий. Без базы исследование неполно — на коробочных системах значительная часть логики и содержимого хранится именно в ней.

    К этому добавляют сведения об окружении: версию языка, список включённых расширений, версию и настройки веб-сервера. Дальше — журналы веб-сервера, FTP и панели управления за спорный период, журналы ошибок, резервные копии до начала спора, репозиторий с полной историей, если он вёлся.

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

    Отдельная страница: Какие материалы нужны для экспертизы кода на PHP?
    Сайт уже перенесли на другой хостинг — что ещё можно исследовать?

    Многое, но с оговорками. Перенос уничтожает не сам код, а следы: журналы прежнего сервера остаются у прежнего провайдера, отметки времени файлов обновляются при копировании, конфигурация нового сервера отличается от спорной. Поэтому первым делом запрашивают у прежнего хостинг-провайдера всё, что он ещё хранит, — резервные копии и журналы удаляются по расписанию.

    Сам код при переносе обычно сохраняется целиком, и задачи сравнения с эталонной поставкой, разделения слоёв и поиска заимствований решаются как обычно. Ограничения возникают там, где нужны дата и окружение.

    Если прежняя площадка недоступна, эксперт указывает это как ограничение и опирается на другие источники: резервные копии у заказчика, переписку, архивные копии страниц. Вывод о периоде в таком случае формулируется осторожнее.

    Отдельная страница: Сайт уже перенесли на другой хостинг — что ещё можно исследовать?
    Нужна ли выгрузка базы данных для экспертизы кода на PHP?

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

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

    Если в базе есть персональные данные клиентов, объём выгрузки согласуют заранее и по возможности ограничивают таблицами, относящимися к спору. Порядок передачи обсуждается до отправки.

    Отдельная страница: Нужна ли выгрузка базы данных для экспертизы кода на PHP?
    Как передать копию сайта с паролями и персональными данными?

    Копия сайта почти всегда содержит пароль к базе данных, ключи платёжных систем и персональные данные клиентов. Вычищать их из копии нельзя: это изменит объект, и другая сторона справедливо на это укажет.

    Правильный порядок другой. Материалы передают в исходном виде, но по защищённому каналу и ограниченному кругу лиц, а всё, что в копии открывает доступ, после передачи меняют: пароль к базе, ключи внешних сервисов и служебные ключи подписи, которыми система заверяет сеансы пользователей; заодно завершают активные сеансы. Заодно принудительно меняют пароли привилегированных учётных записей: их защищённые представления лежат в выгрузке. Объём выгрузки персональных данных и срок хранения материалов согласуют заранее.

    Эксперта соглашение о конфиденциальности связывает, стороны — нет: то, что попало в суд, они увидят. Это учитывают при выборе объёма ещё до отправки, а не после.

    Отдельная страница: Как передать копию сайта с паролями и персональными данными?
    Можно ли заранее оценить перспективу экспертизы кода на PHP?

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

    Если нужен документ, а не разговор, оформляется письменная консультация или справка специалиста. В ней эксперт по представленным материалам показывает, что именно может быть установлено и с какими ограничениями, — это отдельная платная услуга, и путать её с бесплатным разбором не стоит.

    Гарантировать заранее содержание будущих выводов нельзя: они зависят от материалов, которые окажутся в распоряжении эксперта, и от поставленных судом вопросов.

    Отдельная страница: Можно ли заранее оценить перспективу экспертизы кода на PHP?
    Какие вопросы ставят эксперту по коду на PHP?

    Годный вопрос называет две вещи: объект и проверяемый критерий. Объект по PHP — это конкретный архив с контрольной суммой либо адрес площадки с датой снятия копии; критерий — пункт технического задания, требование договора или документация используемой системы.

    Формулировки вроде «качественно ли выполнены работы» непроверяемы: эксперт вынужден будет подставить собственное представление о качестве, и заключение окажется уязвимым. Не следует также просить эксперта оценить достаточность доказательств или чужого заключения — это функция суда.

    Полезно ставить вопросы раздельно: отдельно о соответствии заданию, отдельно о составе и происхождении кода, отдельно о причине отказа. Помощь с формулировками возможна до назначения экспертизы; после назначения вопросы уточняются только через суд.

    Отдельная страница: Какие вопросы ставят эксперту по коду на PHP?
    Чем судебная экспертиза кода на PHP отличается от внесудебной?

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

    Внесудебное исследование выполняется по договору со стороной: материалы передаёт заказчик, предупреждения об уголовной ответственности нет. Методы и требования к описанию объектов при этом те же, и такое исследование используют, чтобы оценить перспективу до иска или обосновать ходатайство о назначении экспертизы.

    Вес документов определяет суд, оценивая их наравне с другими доказательствами. После назначения судебной экспертизы порядок общения меняется: назначенный эксперт не принимает материалы от одной стороны и не даёт ей частных оценок по существу поручения.

    Отдельная страница: Чем судебная экспертиза кода на PHP отличается от внесудебной?
    От чего зависят стоимость и срок экспертизы кода на PHP?

    Прежде всего — сколько слоёв придётся разделять. Сайт на коробочной системе с двумя десятками модулей требует сопоставления с эталонной поставкой каждого из них, и это самостоятельная работа, которой нет у проекта, написанного с нуля.

    Второе — уцелело ли окружение. Если известны версия языка, состав расширений и настройки сервера, копия поднимается за часы; если площадка уже недоступна, воспроизведение среды становится отдельной задачей с неопределённым результатом. Третье — есть ли история изменений: репозиторий отвечает о датах сразу, его отсутствие означает реконструкцию по журналам, резервным копиям и переписке.

    Дальше как везде: объём спорной части, число проверяемых требований, количество вопросов и необходимость смежных специалистов. Точные условия определяются после просмотра материалов; ориентир — от 100 000 ₽ и 10 рабочих дней.

    Отдельная страница: От чего зависят стоимость и срок экспертизы кода на PHP?
    Как проверить или оспорить заключение по коду на PHP?

    Рецензента интересуют не выводы, а то, как эксперт к ним пришёл. Первое — объекты: назван ли конкретный архив с контрольной суммой или адрес и дата снятия копии, описано ли, откуда копия получена. Если объект описан как «сайт заказчика», проверить исследование невозможно.

    Второе — исключено ли общее основание: ядро коробочной системы, библиотеки, сгенерированные файлы. Заключение, где объём работ или процент заимствования посчитан по всему каталогу, завышает величину кратно. Третье — воспроизведено ли окружение и разобраны ли альтернативные объяснения: смена версии языка, действия третьих лиц, правки самого заказчика.

    Отдельно смотрят, не вышел ли эксперт за пределы вопросов и своей компетенции. Подробнее — на странице рецензии на заключение о процессе разработки.

    Отдельная страница: Как проверить или оспорить заключение по коду на PHP?
    Обращение в организацию

    Отправьте материалы на предварительную оценку

    Приложите имеющиеся документы и кратко опишите задачу. Мы проверим компетенцию и комплектность, определим специальность эксперта и сообщим возможные срок и стоимость.

    Отправить материалы