Как скрыть токен на сайте?
Всем привет.
Есть сайт, на нём форма, данные из которой отправляются в телеграмм бота. Обработка формы для отправки написана на 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 его не нужно
<?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. Проверил, все работает, выводит на верху страницы.
<?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']; echo "TOKEN: $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']; echo "TOKEN: $TOKEN"; // Используем токен в вашем коде... ?>
Для дальнейшего использования мне его нужно записать так?
$TOKEN= "TOKEN";
<?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']; остальной код ?> |
<?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']; остальной код ?>
- Ну да, прям тут его вставь, зачем его на клиент и обратно отправлять?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для скрытия токена на сайте можно использовать различные подходы в зависимости от того, какой именно токен вы хотите скрыть и на каком уровне безопасности вы хотите это сделать.
1. **В HTML коде**: Если вы хотите скрыть токен на стороне фронтенда, то можно использовать специальные методы, такие как хеширование или шифрование. Например, вы можете хешировать токен с помощью JavaScript перед отправкой на сервер или использовать методы шифрования данных.
```html
var token = 'your_token_here'; var hashedToken = sha256(token);
```
2. **В PHP коде**: Если вы хотите скрыть токен на серверной стороне, то можно сохранить его в переменной окружения или в файле конфигурации, который не доступен публично. Также можно использовать методы авторизации, чтобы ограничить доступ к токену только авторизованным пользователям.
```php
$token = getenv('SECRET_TOKEN');
```
3. **Использование .env файлов**: Для хранения конфиденциальной информации, такой как токены, лучше всего использовать .env файлы. В таком файле можно хранить все конфиденциальные данные и затем использовать библиотеку для чтения этого файла в вашем коде.
```php
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $token = $_ENV['SECRET_TOKEN'];
```
4. **Использование HTTP заголовков**: Для передачи токена с клиента на сервер без его отображения в URL или форме запроса можно использовать HTTP заголовки. Например, вы можете передавать токен в заголовке Authorization.
```php
$headers = getallheaders(); $token = $headers['Authorization'];
```
Важно помнить, что скрытие токена - это лишь один из шагов к обеспечению безопасности вашего сайта. Всегда следует принимать дополнительные меры безопасности, такие как использование HTTPS, проверка прав доступа и регулярное обновление токенов.