PHP CMS: функция "Call Home" при установке - PullRequest
3 голосов
/ 14 апреля 2011

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

Большинство функций вызова дома используют file_get_contents, но они проверяют, я просто хочу сохранить URL.Является ли отправка запроса с экранированным URL-адресом в переменной GET приемлемой опцией?Безопасность, скорость и функциональность в широком спектре или настройках сервера являются ключевыми.

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

Заранее благодарен за любую помощь!

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

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

Для CMS / приложения:

<?php
define('SITE_INVALID', 'invalid');
define('AUTH_SITE',    'http://www.example.com/verify.php');

function verify_install($key){
    $result = file_get_contents(AUTH_SITE.'?key='.urlencode($key));

    if($result == SITE_INVALID){
        return false;
    }

    // Valid
    return true;
};
?>

Затем где-нибудь на вашей странице (в начале):

<?php
$site_key = $_SERVER['SERVER_NAME'];    // Use current site URL (eg: www.example.com)

if(!verify_install($site_key)){
    // Invalid
    echo 'Your account is disabled';
    exit();
}

// Continue as normal
?>

А на сервере лицензий:

<?php
define('SITE_VALID',    'valid');
define('SITE_INVALID',  'invalid');

function verify_remote_install(){
    if(!isset($_GET['key'])){
        // Nothing sent - assume fine
        return true;
    }

    $key = urldecode($_GET['key']);

    // (Check if key in database, etc)
    $result = key_is_valid($key);   // Replace with your own method

    if(!$result){
        // Invalid
        return false;
    }

    // Valid
    return true;
}
?>

Затем для проверки:

<?php
$result = verify_local_install();

if(!$result){
    echo SITE_INVALID;
} else {
    echo SITE_VALID;
}
?>

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

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

Как уже было сказано, любой, кто имеет базовые знания PHP (или даже умеет читать), может легко найти это и отключить, если код каким-то образом не запутан. Для этого вы можете найти приложение с открытым исходным кодом по адресу http://code.google.com/p/phpobfuscator/.. Если вы все еще хотите, чтобы разработчики могли модифицировать приложение, вы можете просто скрыть лицензионный код, поместить отдельный файл и дать ему фальшивое, невинное имя.

0 голосов
/ 14 апреля 2011

Я рекомендую проверить, как http://www.socialengine.net/ шифрует их исходный код и получает ключ дешифрования и авторизацию. Они довольно большие и будут иметь надежные методы. Я пытался взломать его некоторое время назад для удовольствия, но не получилось.

...