Пожалуйста, обратите внимание, что пользователь заблокирован
В общем, столкнулся я со следующей проблемой: нужно грамотно защитить исходный код. Давайте разберемся, почему привычные методы защиты кода не особо подходят в "наших" делах.
1. Шеллы. Данный вариант обваливается на самом первом этапе. На моменте передачи исходного кода заказчику. Как правило, использование шеллов ВЕЗДЕ запрещено
2. Обфускация кода. Штука не особо запрещена, но во-первых заказчик будет не очень рад видеть такое, да и это оставляет скрипт работоспособным, потому при сливе скрипта, его будут использовать в обфусцированном виде, при том, что он будет оставаться работоспособным.
Нам нужно простое и эффективное решение. Чтобы никак не "шифровать" код и не оставлять в нём всякие "сюрпризы". Конечно, можно было бы сделать некий API, где вы выдаёте некие "исходники", часть которых будет обрабатываться на устройстве, с которого его запустили (сервер, хостинг, ПК), а часть будет обрабатываться на вашем сервере. Во-первых это весьма сложно в плане реализации, а эту статью я пишу не для профессионалов в программировании. Таким образом, задача следующая: реализовать некую систему контроля скриптом, чтобы, например, в случае каких-либо проблем (сливы, проблемы с заказчиком и т.д.) вы могли приостановить таким пользователям работу скрипта при том условии, что код по сути будет чистым.
Разбирать буду реализацию на примере PHP, а в конце будет чуть-чуть Python
Работать будем с одним из моих проектов (ручной обменник BTC). Скрипт реализован на PHP, стоит на доменах. Потому имеется .htaccess. Основная задача - оставить себе дыру для получения токена Telegram-бота
.htaccess — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
Но для нас, это просто инструмент для ограничения исходного кода от простых заходов по сайту, чтобы нельзя было просто получить исходник прописав в адресную строку https://домен/файл.php
Что же этот скриншот означает? То, что я выделил в зеленый квадрат ограничивает файлы .txt и .zip от всех пользователей, то есть, как я описал выше - доступ к исходникам просто по URL получить не выйдет с данными настройками .htaccess, а потому мы сделаем уязвимость для самих себя и просто пропишем на файл с конфигом, где указывается наш токен - allow from all. Но с большой оговоркой, что файл конфига не будет называться config.php т.к даже индексатор не нужен, чтобы найти файл конфига с таким названием)0)
По-этому добавляем в .htaccess строчки:
Код:
<Files название файла>
allow from all
</Files>
Таким образом, мы оставили доступ к файлу, который содержит токен бота. Это был первый вариант. Переходим ко второму, более интересному.
Наша задача вывести токен из файла конфигурации в переменную в отдельном файле, в котором реализовываются скрипты. Если у вас конфигурации и скрипты находятся в рамках одного файла, то я вам соболезную))) Желательно переделать, это ненадежно.
Я решил сделать невзрачную команду, в перечне других команд, чтобы не выделялась. Команда выглядит так:
Эта команда означает, что если в Telegram-бота отправить команду /ConfigInfo , то независимо от наших привилегий и доступов, бот выдаст нам следующее сообщение:
Тем самым, вы получите токен.
Я бы рекомендовал, к каждому исходнику сделать отдельный номерок, который вы присвоите за конкретным клиентом, чтобы в случае слива скрипта, понимать, кто именно это сделал.
В моём случае, в файле с конфигурациями, я сделал следующую строчки:
Эта строчка лишь имитация API / лицензии. Хотя если вам понравится данная статья, то я покажу, как из этого сделать полноценное распределение и создание лицензий. Но пока что это лишь строчка, которая не отвечает вообще ни за что. При сливах и передачах другим пользователям вашего продукта, никто не будет менять эту строчку, ошибочно полагая, что скрипт перестанет работать или что-то другое. Для каждого клиента, нужно будет менять "ключ", и заносить куда-нибудь себе. У меня для этого используется база данных MySQL на другом проекте. А начинающим подойдёт и обычный блокнот. Таким образом, в случае слива, мы узнаем, кто это сделал.
Превращаем бота в "кирпич"
Имея токен, просто создаём простейший скрипт на Python такого формата:
Код:
bot = telebot.TeleBot('token')
@bot.message_handler(commands=['start']) def start_message(message):
bot.send_message(message.chat.id, 'Оплати лицензию, чертила. ПМ на @Логин')
@bot.message_handler(content_types=['text']) def start(message):
bot.send_message(message.chat.id, 'Оплати лицуху, чорт. ПМ на @Логин')
Таким образом, зная токен, мы превратили человеку наш продукт в кирпич. До тех пор, пока не оплатит лицензию. А если попытается сменить токен - то просто при запросе мы получим и его.
А для получения всех ботов в онлайн-режиме, мы используем команду:
Это лишь пример, а вообще, при каждом первом запуске загонять бота в базу данных, чтобы при повторении не было отстука ранее созданных ботов. В общем, используйте задумку как угодно со своими наворотами
А если мы и вовсе хотим чекать все логи от лица бота, то для этого нам потребуется Graph Messenger с функцией авторизации по токену бота.
На этом всё. Всем успехов)