Обеспечить безопасность сервера
Как обезопасить сервер, на который приходят данные, то есть, чтобы на сервер приходили только данные с моего сайта. Можно ли положить сервер, зная его адрес? Пытаюсь сделать для сокет сервера проверку на HTTP_REFERER, но там пустое значение
Ответы (1 шт):
Итак, допустим у вас сейчас такой код:
const socketEndpoint = "wss://example.com/socket";
const socketConnection = new WebSocket(socketEndpoint);
Для начала, я бы отправлял POST-запрос на сервер, чтоб он проверил этот запрос на referer и сессийные куки и отдал клиенту токен для соединения по сокету.
Кстати, этот ключ можно привязать к IP и юзерагенту.
Так же, как вариант, для затруднения обхода защиты, сервер в случае проблем может возвращать случайный неработающий токен вместо сообщения об ошибке.
Но referer можно подменить, если отправлять запрос не из браузера, а из стороннего софта. Поэтому нужно затруднить отправление запросов не из своего хоста, например, добавить секретную подпись на стороне клиента, которая генерируется по непонятному алгоритму, а потом обфусцировать этот код. Для обфускатора могу посоветовать obfuscator.io и выкрутить все параметры на максимум =)
// 1. Отправляем запрос на токен к серверу. Он проверяет куки и `referer` и возвращает токен.
const securityEndpoint = "/getSocketToken.php";
const response = await fetch(securityEndpoint).then(response => response.json());
const socketToken = response.socketToken;
// 2. Создаем "подпись" - таймстамп + соленый хеш
// ! Сервер должен проверять и таймстамп, и его подпись, и сам токен
const signatureSecret = "someSecretString" + window.location.hostname;
const timestamp = Date.now();
const signature = timestamp + ":" + md5(timestamp + socketToken + signatureSecret).substr(0, 8);
// 3. Передаем эти данные серверу
const params = "?token=" + socketToken + "&signature=" + signature;
const socketEndpoint = "wss://example.com/socket" + params;
const socketConnection = new WebSocket(socketEndpoint);
Так же советую разбросать генерацию этих кодов на пару функций для усложнения анализа.