Как скрыть токен на сайте?

Ссылка скопирована
29 марта 2026 1 ответ

Всем привет.

Есть сайт, на нём форма, данные из которой отправляются в телеграмм бота. Обработка формы для отправки написана на js и поэтому токен бота можно увидеть в коде сайта.

Пробовал настраивать через переменные окружения, при помощи dotenv и php. Токен передается, но видимо что-то делаю не так. И как я понял при передаче из php в javascript мой токен снова становится виден всем в коде сайта.

Как сделать так чтобы этого не происходило? Может быть Что мне будет проще всего реализовать, при учете что я только начинающий.

Буду рад любой помощи.

Код, который берет токен из env файла выглядит так.

<?php error_reporting(E_ALL); ini_set('display_errors', 1);  require 'vendor/autoload.php';  use DotenvDotenv;  // Укажите путь к каталогу, где расположен .env файл $dotenvPath = __DIR__;  // Создаем экземпляр Dotenv и загружаем переменные окружения $dotenv = Dotenv::createImmutable(dirname(__DIR__)); $dotenv->load();  // Получаем значение токена $TOKEN = $_ENV['TOKEN'];  // Используем токен в вашем коде...   ?>

<?php error_reporting(E_ALL); ini_set('display_errors', 1); require 'vendor/autoload.php'; use DotenvDotenv; // Укажите путь к каталогу, где расположен .env файл $dotenvPath = __DIR__; // Создаем экземпляр Dotenv и загружаем переменные окружения $dotenv = Dotenv::createImmutable(dirname(__DIR__)); $dotenv->load(); // Получаем значение токена $TOKEN = $_ENV['TOKEN']; // Используем токен в вашем коде... ?>

Дополнительно:

вот из этого куска кода ваш токен не может быть виден в браузере, тк он выполняется на сервере
а передавать из php в js его не нужно

  • Скрип написан на js и его видно к сожалению. Переписал скрип на php, но теперь файлы не приходят. Нужно наверно еще что-то настраивать, но я не очень хорошо в этом разбираюсь.

    <?php
    //
    $TOKEN = "TOKEN";
    $CHAT_ID = "CHAT_ID";

    /
    if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $product = $_POST['product'];
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    $attachments = $_FILES['attachments'];
    $invoice = $_FILES['invoice'];

    $message = "Formn";
    $message .= "Name: ".$product." n";
    $message .= "Sender: ".$name." n";
    $message .= "phone: ".$phone." n";
    $message .= "Email: ".$email;

    file_get_contents("https://api.telegram.org/bot$TOKEN/sendMessage?cha...);

    function sendFile($TOKEN, $CHAT_ID, $document, $caption = '') {
    $url = "https://api.telegram.org/bot$TOKEN/sendDocument";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'chat_id' => $CHAT_ID,
    'document' => new CURLFile($document['tmp_name'], $document['type'], $document['name']),
    'caption' => $caption
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = curl_exec($ch);
    curl_close($ch);
    }

    // Sending files to Telegram

    if ($attachments['error'] == UPLOAD_ERR_OK) {
    sendFile($TOKEN, $CHAT_ID, $attachments,);
    }
    if ($invoice['error'] == UPLOAD_ERR_OK) {
    sendFile($TOKEN, $CHAT_ID, $invoice,);
    }
    }
    ?>

  • Как сделать так чтобы этого не происходило?

    Не передавать в js, зачем он там?

  • JS стучится на свой же сервер, а там PHP или что там на бэке уже CURL`ом отправляет запрос к телеге. В JS думаю никак токен не скрыть.

    Сайт должен передавать данные на свой бэк, а уже бэк должен отправлять их в telegram. Для защиты от спама через ваш бэк используйте CSRF.

    Ответы:

    Сделал скрипт на php, отправляет и файлы и сообщения. Но запутался в переменных. Так я получаю токен с файла env. Проверил, все работает, выводит на верху страницы.

    &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);  require 'vendor/autoload.php';  use DotenvDotenv;  // Укажите путь к каталогу, где расположен .env файл $dotenvPath = __DIR__;  // Создаем экземпляр Dotenv и загружаем переменные окружения $dotenv = Dotenv::createImmutable(dirname(__DIR__)); $dotenv-&gt;load();  // Получаем значение токена $TOKEN = $_ENV['TOKEN'];  echo "TOKEN: $TOKEN";  // Используем токен в вашем коде...   ?&gt;

    &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1); require 'vendor/autoload.php'; use DotenvDotenv; // Укажите путь к каталогу, где расположен .env файл $dotenvPath = __DIR__; // Создаем экземпляр Dotenv и загружаем переменные окружения $dotenv = Dotenv::createImmutable(dirname(__DIR__)); $dotenv-&gt;load(); // Получаем значение токена $TOKEN = $_ENV['TOKEN']; echo "TOKEN: $TOKEN"; // Используем токен в вашем коде... ?&gt;

    Для дальнейшего использования мне его нужно записать так?
    $TOKEN= "TOKEN";

    &lt;?php // process_form.php  // Токен бота и ID канала в Telegram $TOKEN= "TOKEN";   $TELEGRAM_CHAT_ID = "-1002017740876";  // Проверка наличия POST запроса if ($_SERVER["REQUEST_METHOD"] == "POST") {     // Сбор данных из формы     $product = $_POST['product'];     $name = $_POST['name'];     $phone = $_POST['phone'];     $email = $_POST['email'];     $attachments = $_FILES['attachments'];     $invoice = $_FILES['invoice'];   // Проверка наличия POST запроса if ($_SERVER["REQUEST_METHOD"] == "POST") {     // Сбор данных из формы     $product = $_POST['product'];     $name = $_POST['name'];     $phone = $_POST['phone'];     $email = $_POST['email'];     $attachments = $_FILES['attachments'];     $invoice = $_FILES['invoice'];   остальной код  ?&gt;

    &lt;?php // process_form.php // Токен бота и ID канала в Telegram $TOKEN= "TOKEN"; $TELEGRAM_CHAT_ID = "-1002017740876"; // Проверка наличия POST запроса if ($_SERVER["REQUEST_METHOD"] == "POST") { // Сбор данных из формы $product = $_POST['product']; $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; $attachments = $_FILES['attachments']; $invoice = $_FILES['invoice']; // Проверка наличия POST запроса if ($_SERVER["REQUEST_METHOD"] == "POST") { // Сбор данных из формы $product = $_POST['product']; $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; $attachments = $_FILES['attachments']; $invoice = $_FILES['invoice']; остальной код ?&gt;

    • Ну да, прям тут его вставь, зачем его на клиент и обратно отправлять?
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

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

    1. **В HTML коде**: Если вы хотите скрыть токен на стороне фронтенда, то можно использовать специальные методы, такие как хеширование или шифрование. Например, вы можете хешировать токен с помощью JavaScript перед отправкой на сервер или использовать методы шифрования данных.

    ```html

     
    var token = 'your_token_here';
    var hashedToken = sha256(token);

    var token = 'your_token_here'; var hashedToken = sha256(token);

    ```

    2. **В PHP коде**: Если вы хотите скрыть токен на серверной стороне, то можно сохранить его в переменной окружения или в файле конфигурации, который не доступен публично. Также можно использовать методы авторизации, чтобы ограничить доступ к токену только авторизованным пользователям.

    ```php

    $token = getenv('SECRET_TOKEN');

    $token = getenv('SECRET_TOKEN');

    ```

    3. **Использование .env файлов**: Для хранения конфиденциальной информации, такой как токены, лучше всего использовать .env файлы. В таком файле можно хранить все конфиденциальные данные и затем использовать библиотеку для чтения этого файла в вашем коде.

    ```php

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv-&gt;load();
    $token = $_ENV['SECRET_TOKEN'];

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv-&gt;load(); $token = $_ENV['SECRET_TOKEN'];

    ```

    4. **Использование HTTP заголовков**: Для передачи токена с клиента на сервер без его отображения в URL или форме запроса можно использовать HTTP заголовки. Например, вы можете передавать токен в заголовке Authorization.

    ```php

    $headers = getallheaders();
    $token = $headers['Authorization'];

    $headers = getallheaders(); $token = $headers['Authorization'];

    ```

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно