Это решение, которое я использую:
function resolve(path, obj=self, separator='.') {
var properties = Array.isArray(path) ? path : path.split(separator)
return properties.reduce((prev, curr) => prev && prev[curr], obj)
}
Пример использования:
// accessing property path on global scope
resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// accessing array indexes
// (someObject has been defined in the question)
resolve("part3.0.size", someObject) // returns '10'
// accessing non-existent properties
// returns undefined when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
// accessing properties with unusual keys by changing the separator
var obj = { object: { 'a.property.name.with.periods': 42 } }
resolve('object->a.property.name.with.periods', obj, '->') // returns 42
// accessing properties with unusual keys by passing a property name array
resolve(['object', 'a.property.name.with.periods'], obj) // returns 42
Ограничения:
[]
) для индексов массива, хотя указание индексов массива между токеном разделителя (например, .
) отлично работает, как показано выше. Обфускание вещей может привести только к неудобствам ваших законных, законопослушных клиентов, в то время как люди, которые будут разорвать вас, не будут вашими клиентами, платящими за вас. (отредактировал другие мысли об обфускации)
Другое предложение для защиты вашего программного обеспечения: создать бизнес-модель, в которой код является неполной частью стоимости вашего предложения. Например, продавайте лицензии на продукт вместе с доступом к некоторым данным, которые вы управляете на своем сайте, или лицензируете продукт на модели подписки или при поддержке клиента.
Разработка EULA является юридическим вопросом, а не вопросом кодирования , Вы можете начать с чтения некоторого текста EULA для продуктов и веб-сайтов, которые вы используете. Вы можете найти интересные подробности!
Создание проприетарной лицензии является очень гибким и, вероятно, предметом, выходящим за рамки предполагаемого объема StackOverflow, поскольку это не совсем о кодировании.
Некоторые части EULA, которые приходят на ум:
Вы должны обратиться к юристу для подготовки коммерческого лицензионного соглашения.
edit: Если этот проект не может оправдать расходы из них:
, на мой взгляд, но на всякий случай, если ваша программа php-кода написана для автономной модели ... лучшие решения: c) Вы можете обернуть php в контейнер, например Phalanger (.NET). поскольку все знают, что это тесно связано с системой, особенно если ваша программа предназначена для пользователей Windows. вы просто можете сделать свой собственный алгоритм защиты на языке программирования Windows, например .NET / VB / C #, или что вы знаете в .NET prog.lang.family.
Я не смотрел исходный код VBulletin за некоторое время, но способ, которым они занимались в 2003 году, заключался в том, чтобы встроить вызов на свой сервер внутри кода. IIRC, он был на очень длинной строке кода (например, 200-300 + символов долго) и был разбит на несколько конкатенаций строк и т. Д.
Он не сделал ничего «плохого», если вы его пиратствовали - форум все еще работал на 100%. Но IP-адрес вашего сервера был зарегистрирован вместе с другой информацией, и они использовали это для расследования и принятия юридических мер.
Ваш номер лицензии был встроен в этот вызов, чтобы они могли легко отслеживать количество IP-адресов / веб-сайтов, на которых была запущена данная лицензионная копия.
Они распространяют свое программное обеспечение под лицензией . Закон защищает их права и не позволяет своим клиентам перераспределять источник, хотя нет реальной проблемы с этим.
Но, как вы, возможно, хорошо знаете, нарушение авторских прав (пиратство) программных продуктов является довольно распространенное явление .
Zend Guard не поддерживает php 5.5 и легко реверсируется, идите для http://www.ioncube.com для обфускации. http://www.phplicengine.com может лицензировать сценарии удаленно или локально.
См. наш SD-Obfuscator . Обрабатывает огромные системы файлов PHP. На сервере PHP нет требований времени выполнения. Нет дополнительных дополнительных затрат времени.
[EDIT май 2016]. В недавнем ответе было отмечено, что Zend не обрабатывает PHP5.5. SD-обфускатор PHP PHP.
Вам нужно учитывать ваши цели:
1) Вы пытаетесь запретить людям читать / изменять ваш код? Если да, вам понадобится инструмент обфускации / шифрования. Я использовал Zend Guard с хорошим успехом.
2) Вы пытаетесь предотвратить несанкционированное перераспределение вашего кода? Лицензия EULA / proprietary предоставит вам юридическую силу, чтобы предотвратить это, но на самом деле не остановит ее. Схема ключа / активации позволит вам активно контролировать использование, но может быть удалена, если вы также не зашифруете свой код. Zend Guard также имеет возможности блокировать конкретный скрипт для конкретной клиентской машины и / или создавать временные версии кода, если это то, что вы хотите сделать.
Я не знаком с vBulletin и т. П. , но им нужно либо зашифровать / обфускать, либо доверять своим пользователям, чтобы они поступали правильно. В последнем случае у них есть защита от наличия лицензионного соглашения, которое запрещает поведение, которое они считают нежелательным, и правовую систему для защиты от нарушений лицензионного соглашения.
Если вы не подготовлены / не можете предпринять юридические действия для защиты своего программного обеспечения, и вы не хотите шифровать / обфускации, ваши варианты: a) Отпустите его с помощью EULA, чтобы у вас была юридический вариант, если вам когда-либо понадобится, и надеяться на лучшее, или б) рассмотреть вопрос о том, может ли лицензия с открытым исходным кодом быть более подходящей и просто разрешить перераспределение.
Единственный способ действительно защитить ваши php-приложения от других - это не передавать исходный код. Если вы отправляете код где-то в Интернете или отправляете его своим клиентам с помощью какого-то носителя, других людей, кроме того, что у вас есть доступ к коду.
Вы можете добавить уникальный водяной знак для каждой копии вашего кода. Таким образом, вы можете отслеживать утечки обратно на одного клиента. (Но это вам поможет, поскольку код уже находится вне вашего контроля?)
В большинстве случаев я вижу лицензию и, возможно, гарантию. Строка в верхней части сценария, говорящая людям не изменять сценарий, может быть достаточно. Само; когда я нахожу не открытый исходный код, я не буду использовать его в своих проектах. Может быть, я немного обманываю, но я ожидаю, что ppl не будет использовать мой код без OSS!
Итак, позвольте мне видеть, мы хотим показать адам и канун, есть какой-то запретный плод в дереве, и мы бы хотели, чтобы они не ели ...
Как насчет того, чтобы иметь ангела с огненным мечом?
Если вы не можете создать «облачное приложение», которое вы размещаете самостоятельно, и они получают доступ через Интернет, вы можете изучить создание виртуального устройства с использованием виртуального сервера (из VMWare, Parallels, Sun и т. д.) и установить это «облегченная» версия Linux. Поместите свой PHP-код в виртуальную среду и установите виртуальную машину на свой сервер. Обязательно создайте способ предотвращения загрузки в корневой каталог. Конечно, это предполагает физическое посещение клиента.