Как ограничить доступ к выполнению команд?
Всех приветствую! Подскажите, как правильно или как лучше сделать ограничение по выполнению команд? Необходимо, чтобы по выполнению команды (проверка уже реализована и работает правильно) бот молчал.
def check_id(message): record = cursor.execute('SELECT * FROM table_table WHERE user_id=?', (id, )).fetchone() if record: return True else: return False @bot.message_handler(func=lambda message: check_id(message) == False, commands=['help', 'menu', 'start']) def some(message): bot.send_message(message.chat.id, 'Нельзя') #Необходимо заменить эту строку или сделать что-то другое. #Пустое сообщение бот отправить не может.
Отслеживать
задан 23 ноя 2021 в 10:02
33 1 1 серебряный знак 10 10 бронзовых знаков
Достаточно поставить pass, и программа ничего не будет делать при нужных условиях
23 ноя 2021 в 10:17
@ProgerOffline, буду благодарен, если покажете на примере как его поставить)
23 ноя 2021 в 11:23
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
# Ставим обрботчик на команду /start @bot.message_handler(commands=['start']) def process_start(message): if message.chat.id == "1": bot.send_message(1, "У вас есть права на данную команду") else: pass
Тут можно обойтись даже без else, просто если условине не верно, то ничего не произойдет.
# Ставим обрботчик на команду /start @bot.message_handler(commands=['start']) def process_start(message): if message.chat.id == "1": bot.send_message(1, "У вас есть права на данную команду")
Отслеживать
ответ дан 23 ноя 2021 в 17:23
ProgerOffline ProgerOffline
330 1 1 серебряный знак 8 8 бронзовых знаков
Спасибо за ответ, но у меня все хранится в БД. Да и хотелось бы сделать это все в одну функцию, чтобы на каждую команду не ставить if-ы. Сейчас моя функция работает, но хочется убрать из неё ответ или сделать так, чтобы бот молчал.
23 ноя 2021 в 20:22
Тогда вам стоит предоставить больше кода, чтобы мы понимали о чем идет речь
23 ноя 2021 в 20:28
Я дополнил код полностью. Работает, но нужно просто, чтобы бот не отвечал.
24 ноя 2021 в 9:34
Для начала, тебе придется это писать во всех командах (что глупо?)
Поэтому можно обойтись фильтрами:
from aiogram import types from aiogram.dispatcher.filters import BoundFilter class IsBanned(BoundFilter): key = "is_banned" def __init__(self, is_banned): self.is_banned = is_banned async def check(self, message: types.Message): with open("db.json", "r") as file: db = json.load(file) user_id = message.from_user.id if str(user_id) in db.get("banned_users", <>): return self.is_banned return not self.is_banned
from filters import IsBanned dp.filters_factory.bind(IsBanned) # Пропускаем не забаненных в боте @dp.message_handler(IsBanned(False), CommandStart()) async def handle_all_messages(message: types.Message): . code #что будет показывать забаненным в боте @dp.message_handler(IsBanned(True)) async def banned_user_handler(message: types.Message): await message.answer("Вы забанены в боте.")
В этом коде явно показано использование фильтра. В отличии от того, чтобы указывать в коде забаненных, можно воспользоваться бд.json
> "banned_users": < "6187889732": < "reason": "Banned by admin", "banned_by": 5776777607 >> >
Таким образом фильтр будет получать тех кто находится в словаре и не пропускать.
Проставляй IsBanned(False) в хендлеры всех команд, для того, чтобы не пропускать забаненных к использованию команд и все 🙂
Как обеспечить безопасность телеграм-бота
В этой статье мы поговорим о том, как обеспечить безопасность вашего телеграм-бота на Python, чтобы избежать спама, фишинга и DDoS-атак.
Разработка телеграм-ботов может быть захватывающим и плодотворным занятием. Боты могут выполнять различные задачи, от автоматизации бизнес-процессов до развлекательных функций. Однако важно понимать, что безопасность всегда должна быть на первом месте.
В этой статье мы поговорим о том, как обеспечить безопасность вашего телеграм-бота на Python.
Зачем обеспечивать безопасность ботов
Безопасность – это не просто опция, это обязательное требование в разработке телеграм-ботов. Почему?
- Защита данных: Многие боты обрабатывают чувствительные данные, такие как личная информация пользователей или бизнес-данные. Утечка таких данных может нанести серьезный ущерб как вашей репутации, так и финансовому положению.
- Соблюдение законов: В зависимости от вашей локации и целей бота, существуют различные законы и нормативные акты, которые регулируют обработку и хранение данных. Нарушение законов о защите данных может повлечь за собой серьезные юридические последствия.
- Доверие пользователей: Пользователи ожидают, что их данные будут обрабатываться безопасно и конфиденциально. Нарушение этого доверия может привести к потере пользователей.
- Предотвращение злоупотреблений: Боты подвержены атакам, таким как спам, фишинг и DDoS-атаки. Недостаточно защищенный бот может стать легкой мишенью для злоумышленников.
Прежде чем мы начнем рассматривать конкретные меры безопасности и примеры кода, важно понимать, что обеспечение безопасности – это не статический процесс, а непрерывная практика. Угрозы постоянно меняются, и разработчикам необходимо оставаться внимательными и обновлять свои боты, чтобы бороться с новыми уязвимостямей
Краткий обзор Telegram API в контексте статьи
Прежде чем мы погрузимся в детали обеспечения безопасности для телеграм-ботов на Python, давайте проведем краткий обзор Telegram API и его роли в разработке ботов.
Telegram API – это программный интерфейс приложения Telegram, который позволяет разработчикам создавать приложения и ботов, взаимодействующих с этой популярной мессенджер-платформой. Он предоставляет доступ к широкому спектру функций, включая отправку и прием сообщений, управление чатами, доступ к профилям пользователей и многое другое.
Используемые инструменты и библиотеки (python-telegram-bot, pyTelegramBotAPI)
Существует несколько популярных библиотек и инструментов, которые значительно упрощают процесс разработки ботов для телеги. Рассмотрим рассмотрим две из них: `python-telegram-bot` и `pyTelegramBotAPI`.
1. python-telegram-bot
Эта библиотека является одним из наиболее популярных инструментов для разработки телеграм-ботов на Python. Она предоставляет высокоуровневый интерфейс для работы с Telegram API и включает в себя множество функций и возможностей для создания ботов.
Пример использования python-telegram-bot для создания простого бота:
from telegram.ext import Updater, CommandHandler # Функция-обработчик команды /start def start(update, context): update.message.reply_text("Привет! Я ваш телеграм-бот.") # Создание и настройка бота updater = Updater(token='ваш токен взятый из botFather', use_context=True) dispatcher = updater.dispatcher # Регистрация обработчика команды /start start_handler = CommandHandler('start', start) dispatcher.add_handler(start_handler) # Запуск бота updater.start_polling()
2. pyTelegramBotAPI
`pyTelegramBotAPI` предоставляет удобные средства для создания и управления ботами.
Пример использования pyTelegramBotAPI для отправки сообщения:
import telebot # Создание бота bot = telebot.TeleBot('YOUR_BOT_TOKEN') # Обработчик команды /start @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, 'Привет! Я ваш телеграм-бот.') # Запуск бота bot.polling()
Обе библиотеки, `python-telegram-bot` и `pyTelegramBotAPI`, имеют свои достоинства и особенности. Выбор между ними зависит от ваших потребностей и предпочтений. Однако, важно учесть, что при разработке бота безопасность должна быть на первом месте. Обе библиотеки позволяют взаимодействовать с Telegram API, но безопасное использование API и обеспечение безопасности бота полностью зависит от вашего кода и практик разработки.
Основные угрозы безопасности
Безопасность телеграм-ботов на Python – это одна из наиболее важных задач при их разработке. Понимание основных угроз безопасности позволяет разработчикам принимать соответствующие меры для защиты ботов и данных пользователей. Давайте рассмотрим четыре основные угрозы безопасности телеграм-ботов.
Аутентификация и авторизация
Аутентификация и авторизация – это первый и наиболее важный этап обеспечения безопасности ботов. Недостаточная аутентификация и авторизация могут привести к серьезным уязвимостям и неправомерному доступу к боту.
- Атаки на аккаунты ботов: Злоумышленники могут попытаться взломать аккаунт бота, получив доступ к токену бота или логину и паролю, если они используются.
- Поддельные запросы: Атакующие могут отправлять поддельные запросы, пытаясь выдать себя за бота, и получать доступ к конфиденциальным данным или выполнить вредоносные операции.
Защита от спама и фишинга
Спам и фишинг – это распространенные угрозы, с которыми могут столкнуться боты. Спам-боты могут засорять чаты и каналы, а фишеры могут пытаться обмануть пользователей.
- Спам-боты: Боты могут быть нацелены на массовую отправку сообщений с рекламой или нежелательным контентом, что может вызвать раздражение пользователей и ухудшить опыт использования бота.
- Фишинг: Атакующие могут создавать поддельные боты или сообщения, пытаясь обмануть пользователей, чтобы они предоставили свои личные данные, такие как пароли или финансовую информацию.
Защита от вредоносных команд и скриптов
Боты могут быть запрограммированы на выполнение определенных команд, и безопасность зависит от того, какие команды они могут выполнить. Вредоносные команды и скрипты могут вызвать серьезные проблемы.
- Вредоносные команды: Бот может быть скомпрометирован таким образом, что он начнет выполнять вредоносные команды, например, удалять сообщения, отправлять спам или красть данные.
- Использование уязвимостей в коде: Если код бота содержит уязвимости, злоумышленники могут использовать их для выполнения несанкционированных действий, таких как внедрение вредоносного кода.
Хранение конфиденциальных данных
Секреты, такие как API-токены и пароли, играют важную роль в безопасности ботов. Утечка этих данных может иметь серьезные последствия.
- Утечка токенов: Если злоумышленники получат доступ к токену бота, они могут получить полный контроль над ботом, включая доступ к данным пользователей.
- Хранение конфиденциальных данных: Если бот обрабатывает конфиденциальные данные, такие как личная информация пользователей или платежные данные, их хранение должно быть защищено от несанкционированного доступа.
Знание этих угроз – это первый шаг к их предотвращению.
Меры по обеспечению безопасности
Аутентификация бота
1. Использование токена бота
Первым и самым важным шагом в обеспечении безопасности вашего телеграм-бота является использование уникального токена, предоставленного Telegram при его создании. Этот токен является ключом к вашему боту и должен быть строго защищен от несанкционированного доступа.
from telegram.ext import Updater # Подставьте свой токен бота updater = Updater(token='YOUR_BOT_TOKEN', use_context=True)
2. Ограничение доступа по IP
Дополнительным уровнем безопасности может служить ограничение доступа к вашему боту только с определенных IP-адресов или диапазонов IP. Это помогает предотвратить доступ к боту из нежелательных источников.
from telegram.ext import Updater # Создание списка разрешенных IP-адресов allowed_ips = ['192.168.1.1', '10.0.0.1'] # Функция для проверки IP-адреса def is_allowed_ip(update, context): user_ip = update.message.from_user.ip_address if user_ip in allowed_ips: return True else: return False # Создание и настройка бота updater = Updater(token='YOUR_BOT_TOKEN', use_context=True) # Регистрация обработчика, который проверяет IP-адрес updater.dispatcher.add_handler(MessageHandler(Filters.custom(is_allowed_ip), your_handler_function)) # Запуск бота updater.start_polling()
Обработка входящих сообщений
1. Валидация входящих данных
Всегда важно валидировать и проверять входящие данные, чтобы предотвратить ввод некорректных или вредоносных данных в бота. Это может включать в себя проверку формата сообщений, контента и других параметров.
from telegram import Update from telegram.ext import CommandHandler, CallbackContext # Функция-обработчик команды /setname def set_name(update: Update, context: CallbackContext): user_name = update.message.text if is_valid_name(user_name): # Валидное имя, выполняем действия else: # Некорректное имя, отправляем сообщение об ошибке
2. Защита от SQL-инъекций
Если ваш бот взаимодействует с базой данных, используйте параметризованные запросы или Object-Relational Mapping (ORM), чтобы предотвратить SQL-инъекции. Никогда не выполняйте SQL-запросы, встраивая пользовательские данные напрямую.
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # Создание объекта для работы с базой данных engine = create_engine('sqlite:///mydatabase.db') Session = sessionmaker(bind=engine) session = Session() # Определение модели данных с использованием SQLAlchemy Base = declarative_base() class User(Base): __tablename__ = 'users' primary_key=True) username = Column(String, unique=True) password = Column(String) # Запрос к базе данных с использованием ORM def get_user_by_username(username): return session.query(User).filter_by(username=username).first()
Ограничение доступа к функционалу
1. Ролевая система доступа
Реализация ролевой системы доступа позволяет ограничивать функционал бота в зависимости от роли пользователя. Например, администраторы могут иметь доступ к определенным командам, которые обычные пользователи не могут использовать.
from telegram import Update from telegram.ext import CommandHandler, CallbackContext # Роли пользователей ROLES = < 'admin': 1, 'user': 2 ># Роли пользователей (обратное соответствие) REVERSE_ROLES = # Функция для проверки роли пользователя def has_permission(update: Update, role: str) -> bool: user_id = update.message.from_user.id # Проверка роли пользователя в базе данных или в памяти return check_user_role_in_db(user_id, role) # Обработчик команды, доступной только администраторам def admin_command(update: Update, context: CallbackContext): if has_permission(update, 'admin'): # Выполнение команды для администраторов else: # Отправка сообщения об ошибке # Обработчик команды, доступной всем пользователям def user_command(update: Update, context: CallbackContext): if has_permission(update, 'user'): # Выполнение команды для всех пользователей else: # Отправка сообщения об ошибке
2. Ограничение доступа к запрещенным для обычных юзеров команд
Помимо ролевой системы, можно реализовать механизм ограничения доступа к опасным командам. Это позволяет предотвратить случайное или злонамеренное использование команд, которые могут повредить бота или данные.
from telegram import Update from telegram.ext import CommandHandler, CallbackContext # Список опасных команд DANGEROUS_COMMANDS = ['/delete_data', '/shutdown_bot'] # Функция для проверки доступа к команде def has_access_to_command(update: Update, command: str) -> bool: user_id = update.message.from_user.id if command in DANGEROUS_COMMANDS: # Проверка доступа пользователя к опасной команде else: return True # Доступ разрешен для остальных команд # Обработчик опасной команды def dangerous_command(update: Update, context: CallbackContext): if has_access_to_command(update, '/delete_data'): # Выполнение команды /delete_data else: # Отправка сообщения об ошибке
Мониторинг и журналирование
1. Логирование событий
Логирование событий является важным инструментом для отслеживания действий бота и выявления потенциальных проблем. Записывайте важные события, такие как вход пользователя, выполнение команд и ошибки.
import logging # Настройка логирования logging.basicConfig(filename='bot.log', level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # Логирование события logging.info('Пользователь вошел в чат')
2. Анализ аномалий
Мониторинг логов и анализ аномалий помогают выявлять необычные или подозрительные активности в боте. Это может помочь быстро обнаруживать и реагировать на потенциальные угрозы безопасности.
Шифрование данных
1. Защита конфиденциальных данных
Если ваш бот обрабатывает конфиденциальные данные, такие как пароли или личная информация пользователей, обязательно шифруйте эти данные в базе данных и во время их передачи. Шифрование защищает данные от несанкционированного доступа и утечек. Здесь будет полезна библиотека cryptography.
from cryptography.fernet import Fernet # Генерация ключа для шифрования данных key = Fernet.generate_key() # Создание объекта Fernet с использованием ключа cipher_suite = Fernet(key) # Шифрование данных data = b'Hello, world!' cipher_text = cipher_suite.encrypt(data) # Дешифрование данных plain_text = cipher_suite.decrypt(cipher_text)
2. HTTPS соединение с сервером Telegram
При взаимодействии с сервером Telegram используйте HTTPS для защиты данных, передаваемых между вашим ботом и сервером Telegram. Это предотвратит прослушивание данных злоумышленниками и обеспечит конфиденциальность информации.
import requests # URL сервера Telegram url = 'https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage' # Параметры запроса params = < 'chat_id': 'USER_CHAT_ID', 'text': 'Привет, мир!' ># Отправка запроса с использованием HTTPS response = requests.post(url, json=params) # Обработка ответа от сервера Telegram if response.status_code == 200: print('Сообщение успешно отправлено') else: print('Ошибка при отправке сообщения')
Обеспечение безопасности телеграм-бота – это непрерывный процесс, и меры безопасности должны быть усилены и актуализированы по мере необходимости. Настоятельно рекомендуется периодически аудитировать безопасность вашего бота и реагировать на новые угрозы.
Инструменты для тестирования безопасности телеграм-ботов
Для проведения тестирования безопасности телеграм-ботов используются различные инструменты и методики. Вот некоторые из них:
- Static Application Security Testing (SAST): Этот вид тестирования позволяет выявлять уязвимости в исходном коде бота на этапе его разработки. Инструменты SAST анализируют код на предмет потенциальных угроз безопасности, таких как инъекции SQL, XSS (межсайтовый скриптинг) и другие уязвимости.
- Dynamic Application Security Testing (DAST): DAST-тестирование выполняется в реальном времени, путем отправки запросов к боту и анализа его поведения. Это позволяет выявить уязвимости, которые могут проявиться только во время выполнения.
- Penetration Testing (Pen Testing): В рамках данного тестирования проводятся активные атаки на бота с целью выявления уязвимостей. Зачастую используются специалисты по безопасности, которые имитируют атаки злоумышленников.
- Проверка на стандарты безопасности: Существуют специализированные наборы стандартов и рекомендаций по обеспечению безопасности при разработке ботов. Например, OWASP (Open Web Application Security Project) предоставляет руководства по обеспечению безопасности.
Заключение
Запомните, что безопасность – это процесс, требующий постоянного внимания и обновлений. Такие методы, как аутентификация, валидация данных, контроль доступа и мониторинг, должны быть внедрены с самого начала разработки и регулярно аудитированы. Помните о важности обеспечения обеспечения безопасности при разработке телеграм-ботов и не только.
Как защитить бот Telegram

Хакеры могут атаковать чат-бот в Телеграме по разным причинам. Например, чтобы завладеть управлением и заставить программу работать на себя. Другая цель — получить доступ к конфиденциальным данным, которые собирает алгоритм: контакты клиентов, суммы заказов, реквизиты банковских карт и счетов. В этой статье мы разберёмся, как можно защитить telegram-канал от действий мошенников.
Видеозвонки в SberJazz
Общайтесь с друзьями и близкими везде, где есть Интернет
Попробовать сейчас
Можно ли взломать telegram-бот
Взлом программы
Если говорить о попытке получить доступ к управлению ботом, то в Телеграме это сделать практически невозможно. Дело в том, что все роботы Telegram содержат уникальную последовательность символов — токен-идентификатор из нескольких десятков знаков. Без этой последовательности взломать программу не получится.
Токен является внутренним параметром системы, его выдаёт сам мессенджер. Поэтому перехватить сгенерированный ключ нельзя. Для примера рассмотрим, как выглядит процесс подключения чат-бота для Телеграма SaluteBot.
Для запуска бота нужно выполнить следующие действия:
- получить токен в профиле @Botfather в Телеграме;
- связать аккаунт в Telegram с платформой Jivo, указав полученный токен;
- создать SaluteBot с привязкой к Jivo;
- добавить SaluteBot в канал, группу или оставить в режиме личных чатов.
В результате в мессенджере появляется аккаунт робота, для доступа к которому нужен идентификатор.
Пример токена для SaluteBot в Telegram — 807156896:ABGT_sfER5kluOqlbBp-VklQDJ0tGjaPvD7. Чтобы подобрать столь сложную и длинную комбинацию с помощью брутфорса или другими методами, требуются огромные мощности и много времени. Поэтому взлом чат-ботов в Телеграме считается невыполнимой задачей.
Взлом аккаунта владельца
Так как уязвимостей в мессенджере Telegram практически нет, можно зайти с другой стороны: завладеть учётной записью администратора. Например, злоумышленники могут украсть телефон и таким образом получить код доступа к управлению аккаунтом и чат-ботом. Другой способ — попытка авторизоваться в аккаунте с другого устройства: например, в десктоп-версии приложения.
Защитить учётную запись от взлома подобного рода можно в настройках конфиденциальности. В Telegram доступны следующие параметры безопасности:

- облачный пароль — секретный код, который запрашивается при входе с нового устройства в дополнение к коду из СМС;
- код-пароль — для разблокировки приложения нужно ввести четырёхзначную комбинацию;
- вход по отпечатку пальца — биометрическая замена код-пароля.
Ещё одна мера, позволяющая защитить аккаунт, — обеспечение физической безопасности сим-карты. Важно не только следить за сохранностью карты, но и поддерживать актуальность персональных данных у сотового оператора. В случае утери смартфона необходимо как можно скорее заблокировать номер. При этом потребуется подтвердить права на сим-карту, поэтому старайтесь своевременно уведомлять оператора о смене фамилии или изменении других паспортных данных.
Поиск уязвимостей в сценарии
Под взломом робота иногда подразумевают не захват управления, а обман алгоритма. Злоумышленники могут запутать чат-бот, отвечая на его реплики таким образом, чтобы завести программу в тупик и заставить работать по другому сценарию.
Пример: мошенники с помощью специальных команд обманывают робот интернет-магазина, в результате чего получают заказ бесплатно.
Любые действия по взлому программ и учётных записей Telegram являются незаконными, попадают под действие Уголовного кодекса РФ и могут привести к штрафу или лишению свободы.
Как защитить telegram-бот
Защита от DDos-атак
Защититься от многопоточных обращений можно на уровне провайдеров. Все запросы от пользователей Telegram проходят через сервера самого мессенджера. Уже на этом этапе должны блокироваться подозрительные аккаунты, с которых отправляется слишком много сообщений. Здесь же отсеивается масштабный спам.
Также спам-аккаунты могут быть заблокированы по жалобам пользователей. Для этого в настройках диалога Telegram предусмотрена кнопка « Пожаловаться » .

Второй уровень защиты от спама обеспечивает платформа, на которой работает чат-бот. Можно развернуть систему на облачных серверах или использовать собственные мощности. От параметров безопасности выбранных серверов во многом зависит надёжность бота. Поэтому важно выбирать серьёзных провайдеров и хостинги с высокой защитой от кибератак. А чтобы защитить корпоративные сервера от DDos-атак и других угроз, можно воспользоваться готовым комплексным решением по цифровой безопасности.
Например, с помощью инструмента партнера по информационной безопасности можно обеспечить постоянный контроль защищённости IT-периметра компании. Система проводит глубокий анализ внешней инфраструктуры, показывает ежедневные изменения на периметре, что не уступает традиционному тестированию на проникновение. Вероятность ложноположительных срабатываний сведена к нулю: все найденные уязвимости верифицируются вручную экспертами. Использование инструмента позволяет защитить IT-инфраструктуру компании, снизить риск утечки данных и кибератак.
Защита от взлома
Телеграм-бот SaluteBot хорошо умеет распознавать человеческую речь, определяя намерения и потребности собеседников. Этот навык удобно использовать в общении с клиентами — например, чтобы решать различные бизнес-задачи:
- быстрее выяснять цель обращения;
- предлагать подходящие продукты или услуги;
- точнее отвечать на запросы пользователей.
Способность SaluteBot отслеживать реакции можно использовать и для защиты от взлома. Для этого нужно добавить в сценарий реплики и варианты развития общения, при которых программа будет завершать диалог.
Например, можно настроить алгоритм таким образом, чтобы при нестандартном развитии беседы SaluteBot переключал разговор на оператора. Далее сотрудник сам определяет степень риска и либо продолжает общение с пользователем, либо блокирует доступ к телеграм-каналу.

Данный способ помогает защитить бизнес от мошенников. С помощью фильтрации диалогов можно снизить риски обмана, когда злоумышленники используют уязвимости в сценарии и пытаются заставить программу работать в свою пользу.
Создайте своего чат-бота в удобном конструкторе
Простая настройка чат-бота в личном кабинете Цифровой витрины
Попробовать
Защита от спама
Чтобы защитить аккаунт от нежелательных сообщений, можно ограничить доступ к чату. Тогда отправлять сообщения смогут только определённые пользователи: включённые в список или имеющие логин. Другой вариант — первой репликой просить пользователя ответить на вопрос или решить загадку, чтобы отсеять роботов. Данные методы можно реализовать настройками сценария.
Также защититься от спама можно на программном уровне. Для этого можно отслеживать частоту сообщений от каждого пользователя. Так вы сможете выявить аккаунты, с которых робот получает слишком много запросов.
Один из вариантов реализации данного метода — считать интервалы между запросами от одного ID пользователя. Если интервал меньше заданного параметра (например, трёх — пяти секунд), то робот выдаёт предупреждение или завершает диалог.
При работе с SaluteBot доступно несколько вариантов настройки сценария:
- в бесплатном онлайн-конструкторе;
- через инструменты разработчика.
В первом случае не требуются навыки программирования. Создать робот можно на основе готовых шаблонов, просто составляя сценарий из блоков в визуальном редакторе.
Во втором варианте можно дорабатывать и персонализировать сценарий своим кодом, в том числе добавлять логику, позволяющую защититься от взлома. Для разработки требуется знание Java Script и SmartApp DSL.
Существует и третий вариант: заказ разработки под ключ. IT-команда создаст надёжный и функциональный SaluteBot под любой запрос. Готовую программу можно подключить к Telegram и использовать для техподдержки, повышения продаж, общения с клиентами и других целей.
Продукты из этой статьи:
РГГУ предложил ограничить доступ к чат-боту ChatGP
:format(webp)/YXJ0aWNsZXMvaW1hZ2UvMjAyMy8yLzE1Njg1MzEyMzEtMC0xMzktMzE0OC0xOTEwLTE5MjB4MC04MC0wLTAtYWVhN2I3MjAwMzk3ZjNjN2JmYWUxNGI2ZGJmZDIwYmQuanBn.webp)
Доступ к чат-боту ChatGPT стоит заблокировать в рамках образовательной программы в России. С таким предложением выступил Российский государственный гуманитарный университет, написало издание Lenta.ru.
«Использование нейронных сетей для написания творческих и научных работ обсуждается уже не первый год. В образовательных учреждениях доступ к платформе ChatGPT целесообразно ограничить», — сказано в сообщении.
В вузе добавили, что многие зарубежные и отечественные ученые высказывали свои опасения из-за написания дипломных работ, рефератов и эссе нейросетями.
«Раньше для университетов проблемой были только недобросовестные заимствования и плагиат, то сейчас все образовательное сообщество встало перед новым вызовом», — добавили в РГГУ.
Ранее ТАСС сообщал, что один из студентов признался, что защитил дипломную работу, написанную чат-ботом ChatGPT.
Нейросеть ChatGPT создала американская компания OpenAI, одним из основателей которой является бизнесмен Илон Маск. Чат-бот написали на базе суперкомпьютера Azure AI, обучив его на большом количестве текстов и обратной связи от людей.
Как ограничить доступ к боту телеграм?
Здравствуйте.
Есть некий бот, подскажите пожалуйста, каким образом разрешить ему доступ только определенным пользователям?
Интересует именно способ через белый список чат ид юзеров.
Если пишет человек, и его чат ид есть в списке, он может работать, если нет, тогда ничего не происходит, или будет ответ что у вас нет доступа к боту.
Спасибо.
- Вопрос задан более трёх лет назад
- 37407 просмотров
Комментировать
Решения вопроса 1
Использовать в начале хэндлер с проверкой на наличе id в переменной(или в чем то другом)
Пример для python + telebot
@bot.message_handler(func=lambda message: message.chat.id not in users) def some(message): bot.send_message(message.chat.id, "Sorry")
Ответ написан более трёх лет назад
enabl3 @enabl3 Автор вопроса
Скорее всего что то не так сделал.
Выдает ошибку
@bot.message_handler(func=lambda message: message.chat.id not in users)
NameError: global name ‘users’ is not defined
enabl3, users — переменная(список), в примере ее нет.
задается:
users = [‘id1’, ‘id2’ и т.д]
enabl3 @enabl3 Автор вопроса
sar0ka8, написал свой чатИД, перезапустил бота, а он мне отвечает Sorry, как и всем остальным кто ему пишет. Что еще может быть не так?
Нужно посмотреть в каком типе бот получает id int или str(на сколько я помню int), и проверить совпадает ли тип с значениями списка.
Возможно, что вы добавили не id, а username.
Это из того, что я могу придумать не видя код
enabl3 @enabl3 Автор вопроса
sar0ka8, в коде бота написал так:
users = [‘271868950’]
@bot.message_handler(func=lambda message: message.chat.id not in users)
def some(message):
bot.send_message(message.chat.id, «Sorry»)
Это тот ид что отдает мне curl
(ид изменил)
Проверил, id является числом(int), сейчас элементы users это строки. Правильный вариант:
users = [271868950]
Как ограничить доступ к выполнению команд?
Всех приветствую! Подскажите, как правильно или как лучше сделать ограничение по выполнению команд? Необходимо, чтобы по выполнению команды (проверка уже реализована и работает правильно) бот молчал.
def check_id(message): record = cursor.execute('SELECT * FROM table_table WHERE user_id=?', (id, )).fetchone() if record: return True else: return False @bot.message_handler(func=lambda message: check_id(message) == False, commands=['help', 'menu', 'start']) def some(message): bot.send_message(message.chat.id, 'Нельзя') #Необходимо заменить эту строку или сделать что-то другое. #Пустое сообщение бот отправить не может.
Отслеживать
задан 23 ноя 2021 в 10:02
33 1 1 серебряный знак 10 10 бронзовых знаков
Достаточно поставить pass, и программа ничего не будет делать при нужных условиях
23 ноя 2021 в 10:17
@ProgerOffline, буду благодарен, если покажете на примере как его поставить)
23 ноя 2021 в 11:23
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
# Ставим обрботчик на команду /start @bot.message_handler(commands=['start']) def process_start(message): if message.chat.id == "1": bot.send_message(1, "У вас есть права на данную команду") else: pass
Тут можно обойтись даже без else, просто если условине не верно, то ничего не произойдет.
# Ставим обрботчик на команду /start @bot.message_handler(commands=['start']) def process_start(message): if message.chat.id == "1": bot.send_message(1, "У вас есть права на данную команду")
Отслеживать
ответ дан 23 ноя 2021 в 17:23
ProgerOffline ProgerOffline
330 1 1 серебряный знак 8 8 бронзовых знаков
Спасибо за ответ, но у меня все хранится в БД. Да и хотелось бы сделать это все в одну функцию, чтобы на каждую команду не ставить if-ы. Сейчас моя функция работает, но хочется убрать из неё ответ или сделать так, чтобы бот молчал.
23 ноя 2021 в 20:22
Тогда вам стоит предоставить больше кода, чтобы мы понимали о чем идет речь
23 ноя 2021 в 20:28
Я дополнил код полностью. Работает, но нужно просто, чтобы бот не отвечал.
24 ноя 2021 в 9:34
Для начала, тебе придется это писать во всех командах (что глупо?)
Поэтому можно обойтись фильтрами:
from aiogram import types from aiogram.dispatcher.filters import BoundFilter class IsBanned(BoundFilter): key = "is_banned" def __init__(self, is_banned): self.is_banned = is_banned async def check(self, message: types.Message): with open("db.json", "r") as file: db = json.load(file) user_id = message.from_user.id if str(user_id) in db.get("banned_users", <>): return self.is_banned return not self.is_banned
from filters import IsBanned dp.filters_factory.bind(IsBanned) # Пропускаем не забаненных в боте @dp.message_handler(IsBanned(False), CommandStart()) async def handle_all_messages(message: types.Message): . code #что будет показывать забаненным в боте @dp.message_handler(IsBanned(True)) async def banned_user_handler(message: types.Message): await message.answer("Вы забанены в боте.")
В этом коде явно показано использование фильтра. В отличии от того, чтобы указывать в коде забаненных, можно воспользоваться бд.json
> "banned_users": < "6187889732": < "reason": "Banned by admin", "banned_by": 5776777607 >> >
Таким образом фильтр будет получать тех кто находится в словаре и не пропускать.
Проставляй IsBanned(False) в хендлеры всех команд, для того, чтобы не пропускать забаненных к использованию команд и все 🙂
Авторизация в Telegram
Иногда нужно ограничить доступ к боту для определенного круга лиц.
Есть два способа реализовать это:
- Создать логин и пароль, которые будут вводить пользователи
- Ограничить доступ для определенного списка пользователей. Именно эту опцию мы рассмотрим в статье
Чтобы собрать список пользователей, для которых доступен бот, нужно собрать их username.
Username пользователя Telegram – это уникальный идентификатор аккаунта. Посмотреть его можно в настройках Telegram (Настройки –> Изменить профиль –> Имя пользователя). Либо вы можете попросить пользователей написать чат-боту. Так вы автоматически соберете их юзернеймы, отправив их себе в Telegram сообщением либо в Google Таблицу с помощью сервиса IFTTT.
Обратите внимание: Username – это не имя пользователя
Внимание! Если у вас в сценарии есть глобальный блок Интенты, то бот будет предоставлять пользователю информацию согласно реакциям из этого глобального блока. Решение – каждый раз после глобального блока проверять юзернейм пользователя.
Ограничить доступ средствами сценария
Вы можете настроить бот так, чтобы доступ к нему имели только определенные пользователи. Например те, username которых прописан в сценарии. Для этого в блоке Условия пропишите: $rawRequest.message.from.username === «username»
вместо username укажите юзернейм нужного пользователя (идентификатор аккаунта Telegram)

Если их username входит в список, то бот будет приветствовать их, а если нет, то сообщит, что доступ запрещен:

Также вы можете отправлять данные о том, что определенный пользователь воспользовался ботом, сообщением в Telegram по примеру этой статьи.
Либо можете отправлять данные в Google Таблицу с помощью сервиса IFTTT.
Используем Google Таблицы
Если у вас много пользователей Telegram, которым нужно предоставить доступ к боту, а остальным пользователям доступ запретить, вы можете хранить данные этих пользователей в Google Таблице.
Создайте Google Таблицу со списком юзернеймов
Первым делом создайте Google Таблицу со списком юзернеймов пользователей, которые будут иметь доступ к боту:

В таблице нужно перечислять именно юзернеймы пользователей (идентификаторы их аккаунтов), а не имена или телефоны
Опубликуйте таблицу
Чтобы опубликовать Google Таблицу, откройте меню Файл → Поделиться → Опубликовать в интернете (File → Share → Publish to web). Откроется окно, в котором нужно просто нажать на кнопку Опубликовать (Publish).
Создайте новый блок Условия
Создайте блок Условия со следующим содержимым:
Свяжите блок Условия с HTTP-запросом
Свяжите блок Условия с HTTP-запросом:

Содержимое HTTP-запроса
Укажите URL вида:
- Параметр указан внизу таблицы на вкладке листа таблицы.
- Параметр вы можете получить из URL таблицы:

На вкладке RESPONSE добавьте переменную $users со значением _.findWhere($httpResponse, ) .

Создайте новую связь с блоком Условия
Создайте связь с блоком Условия, в котором написано просто: $users .
Если в переменной $users что-то будет, то бот будет приветствовать пользователя, если нет – «Доступ запрещен». Вот как будет выглядеть цепочка экранов:

Вы также можете ознакомиться с подробной инструкцией о том, как обращаться к пользователям по имени и как использовать другие значения переменной $rawRequest .
Ограничение доступа к боту в Телеграм
В данной статье мы разберем как ограничить доступ к боту в телеграме, чтобы только определенные пользователи имели к нему доступ.
Инструкция по интеграции бота в телеграм есть в статье: Как добавить бота в Telegram?
Простой способ — открытие доступа через сценарий
При использовании данного способа для открытия пользователю доступа к боту придется редактировать сценарий, добавляя новое условие для каждого отдельного пользователя.
Руководство
1. В начале сценария установите блок Информация, с помощью которого можно вывести идентификатор пользователя в чат.
В поле Информационное сообщение введите системную переменную . В данной переменной хранится идентификатор пользователя телеграм.

2. Создайте блок Условный выбор с двумя ветками — первая ветка позволит продолжить диалог, а вторая завершит его сообщением «вход запрещен».

3. В стрелке, идущей в продолжение диалога, укажите следующие параметры:
где X — ваш идентификатор. Идентификатор можно получить если интегрировать данный сценарий в телеграм бота, и запустить его. Первым сообщением бот напишет вам идентификатор.
Либо используйте этого телеграм бота с помощью команды /getid.
Во второй стрелке установите тип выходных данных По умолчанию

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

Пример работы


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

Параметры блоков и стрелок

1. В начале сценария создайте блок Информация, с помощью которого можно вывести идентификатор пользователя в чат. В поле Информационное сообщение введите системную переменную .
В данной переменной хранится идентификатор пользователя телеграм.
2. Установите блок Результат и выполните действия:
- Присвойте переменной uid значение: ,
- Выберите тип действия Без действия.

Это необходимо для дальнейшего использования идентификатора в операциях с фактами бота.
3. Создайте блок арифметики и выполните действия:
- Установите тип Произвольный тип,
- в поле BPL-выражение вставьте следующий код:
$reg = fact.load("userId", $uid, @botId)
- Нажмите кнопку Преобразовать BPL в AST
С помощью данной операции бот попытается загрузить факт, содержащий идентификатор пользователя, из своей базы фактов.
В случае, если идентификатор пользователя, ведущего диалог с ботом будет найден в базе фактов — в переменную reg запишется этот идентификатор.
Если в базе такого идентификатора нет — переменная reg будет пустой.

4. Создайте блок условия с двумя ветками — первая ветка идет на блок Информация, вторая — на блок Вопрос.

В стрелке, идущей на блок Информация, установите тип По умолчанию.

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

5. Из блока Вопрос создайте еще две ветки к двум новым блокам Вопрос — данные ветки нужны для команд открытия и закрытия доступа для определенного пользователя.

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

Во второй стрелке все аналогично первой, но в поле ключевых слов необходимо ввести команду /deluser.

6. Ветки с командами идентичны, и состоят из блока Вопрос, блока Арифметическая операция и блока Информация.
В блоке Вопрос запрашивается идентификатор пользователя, которому необходимо открыть или закрыть доступ.

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

В блоке арифметики необходимо установить тип Произвольный тип, и в поле BPL-выражение внести следующие выражения:
В ветке для открытия доступа:
fact.save("userId", $user, $user, @botId)
Данная операция сохраняет идентификатор в базу фактов бота.

В ветке для закрытия доступа: