ПРЕДПОСЫЛКА: Я реализую PHP-сервер без HTTPS/SSL. На этом я хочу подтвердить, что пользователь, выполняющий вызовы на сервер, имеет значение, предполагая, что связь между приложением и сервером просматривается угонщиком (хакером с сетевым снифером). Я также предполагаю, что угонщик является владельцем приложения, пытающимся выяснить, как приложение взаимодействует с сервером, чтобы взломать мою систему. Я не буду контролировать, кто является владельцем приложения.Защита сервера PHP от угонщика
До сих пор я реализовал то, что приложение должно начать сеанс, прежде чем они смогут работать с сервером. Для этого приложение сначала отправляет запрос серверу с произвольно сгенерированным кодом и номером авторизации, а сервер отвечает маркером безопасности. Номер авторизации основан на коде и другой секретной информации в приложении. При последующих вызовах приложение восстанавливает код и использует токен, а другая секретная информация пересчитывает номер авторизации (он никогда не ретранслирует токен на сервер). Таким образом, каждый вызов проверяется.
Он настроен так, что вызывающие параметры одного вызова не могут быть повторно использованы в следующий раз, так что, если угонщик может видеть сообщение, используемое в сеансе, они ничего не могут с ним поделать. Их использование просто указывает, что вызов «не разрешен». Я на 99% уверен, что подключил все связанные дыры к сеансовой связи, так что угонщик не может вторгнуться в мою среду.
ПРОБЛЕМА: Угонщик увидит исходный запрос сеанса, повторно использует эти параметры, чтобы получить новый сеанс и использовать их, чтобы в конечном итоге выяснить, как сеанс вызывает работу.
ВОПРОС: Какую стратегию вы бы использовали, чтобы подтвердить, что только мое приложение разговаривает с сервером во время первоначального запроса сессии, а не угонщик, олицетворяющий мое приложение, чтобы начать сеанс?
Примечание: Сохранение параметров запуска сеанса нереально. Одна из моих идей заключается в том, чтобы вставить «GMT time + N seconds» в случайно сгенерированный код, а затем проверить, установлено ли в GMT GMT + N значение сервера GMT <; таким образом, случайно сгенерированный код становится недействительным в течение N секунд.
То, что вы хотите, невозможно. Если злоумышленник может видеть трафик в обоих направлениях, злоумышленник может олицетворять пользователя (ваше приложение), период. Это основная причина использования SSL. –
Почему вы не используете SSL? Если это из-за стоимости: проверьте letencrypt. – Marged
@Marged Это из-за стоимости, я не знал, что letencrypt существует. Благодарю. – Elenesski