Как защитить webhook telegram?

Доброе время суток, задался вопросом, как не скомпромитироваться свой сервер, при использовании Телеграм api.

В чем суть, делаю бота, который будет взаимодействовать с токенами чужих ботов (пользователи будут создавать токен и передавать мне)

Но есть небольшое "НО", если на данный токен я повешу webhook, то тогда пользователь сможет узнать адрес моего сервера, а значит при злом умысле еще и задосить.((

https://api.telegram.org/bot-token/getWebhookInfo
и мы знаем url(

Так вот вопрос как защитить себя от этого действия?
  • Вопрос задан
  • 2748 просмотров
Решения вопроса 3
Изучите официальные рекомендации по защите WebHook, мне кажется следование по всем этим пунктам будет более чем достаточно)
Ответ написан
Комментировать
Не стоит полагаться на незнание адреса вашего сервера злодеями. Исходите из ситуации, когда им известен адрес web-hook'а, и они собираются его атаковать.

Как вариант, подключиться через сервис вроде CloudFlare (бесплатный), который будет защищать от атак.
Не знаю, публикует ли Telegram IP адреса своих серверов – тогда можно было бы настройить у вас firewall и принимать соединения только от «белых» адресов, отвергая прочие.
Ответ написан
Комментировать
@linuxnb Автор вопроса
Вопрос решили след способом. подняли 2 сервер. на него подцепили клоудфлеер, настроили фаервол, и с 2 сервера, запросы слали, на основной сервак, ну вообщем как то так)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@polarikus
На laravel я сделал так:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class ipAssesMiddleware
{
    // Not Blocked IP addresses
    public $restrictedIp = [
        ['149.154.160.0', '149.154.175.255'],
        ['91.108.4.0', '91.108.7.255']
    ];

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $asses = false;
        $reqIp = ip2long($request->ip());
        foreach ($this->restrictedIp as $item => $value){
            if ($reqIp >= ip2long($value[0]) && $reqIp <= ip2long($value[1])){
                $asses = true;
            }
        }
        if ($asses === false) {
            return response()->json(['message' => "You are not allowed to access this site."], '403');
        }
        return $next($request);
    }
}
Ответ написан
Комментировать
secret_token String Optional A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in every webhook request, 1-256 characters. Only characters A-Z, a-z, 0-9, _ and - are allowed. The header is useful to ensure that the request comes from a webhook set by you.
Дока
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы