1. Вопрос об изобретении велосипедов, и вопрос о том, кому нафиг нужен мой или чей-то еще код, а также предложения находить радость в том, что он хоть кому-то нужен прошу считать в данной ветке офтопом.
2. Собственно, алгоритм.
Есть точка входа в скрипт - это функция с параметрами. Все, что происходит, происходит в ней, в том числе проверка на домен. Будем считать, что изменить функцию и все классы, которые в ней запускаются злоумышленник не сможет (обфускация и т.п.). Основной проблемой при привязке к домену является тот факт, что $_SERVER['SERVER_NAME'] можно подменить до входа в скрипт. Собственно, вопрос в том, чтобы скрипт определял была ли произведена подмена.
Как решается в общих чертах.
а) Запись определенного файла на сервер как-то так $_SERVER['DOCUMENT_ROOT'].путь_к_файлу
б) Проверка его через http по пути $_SERVER['SERVER_NAME'].путь_к_файлу.
Если по http получаем 200 OK, значит $_SERVER['SERVER_NAME'] можно верить, если до входа в скрипт $_SERVER['SERVER_NAME'] было изменено, то по http 200 OK уже никак не получить и тогда считаем, что $_SERVER['SERVER_NAME'] верить нельзя. Таким образом, решаем ключевой вопрос по обходу привязки к домену. Остальное - дело техники.
В принципе, код набросал и он в общих чертах работает так:
Файл по http проверяю через fsockopen(), потому что эта функция по идее интегрирована в php. Запрашиваю только заголовки. Чтобы быть уверенным, что доступ к файлу снаружи не будет блокирован, размещаю в этой же папке .htaccess с доступом конкретно к этому файлу (все остальные запросы извне блокируются в корневом каталоге скрипта).
Функция запроса по http примерно такая:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function check($host,$uri){
- if (!$fp) return false;
- else {
- $request = "HEAD {$uri} HTTP/1.0\r\n";
- $request .= "Host: {$host}\r\n";
- $request .= "Connection: Close\r\n\r\n";
- //Выводим первую строку заголовка ответа
- }
- return true;
- }