Как отправить http(s) запрос на сервер из программы, чтобы его никто не мог подделать?

Рейтинг: 2Ответов: 3Опубликовано: 26.04.2015

Как отправить http(s) запрос на сервер из программы, чтобы его никто не мог подделать?

Программа отправляет некоторую информацию на сервер (статистику), хочу убедиться, что это действительно отправляет моя программа а не злоумышленник

Ответы

▲ 5

Это вопрос из разряда "Как защитить программу, чтобы её нельзя было сломать?" Ответ простой: никак.

Всё, что вы можете — это усложнить работу хакера:

  • традиционная защита бинарников (если код нативный, а для C++ это так, то это важный элемент; если компиляция JIT, то защита бесполезна — только от школьников спасёт);
  • хитро запрятанные цифровые подписи для запросов (как минимум, не кладите ключ в открытом виде);
  • продвинутая валидация на стороне сервера (насколько полученные значения правдоподобные, можно отправлять историю операций и т.п.);
  • регулярные обновления клиента и сервера (никому не в радость ломать программу каждый раз);
  • слежение за отладкой (запущен ли процесс под отладчиком, присутствуют ли подозрительные процессы);
  • и так далее.

Цель — сделать взлом невыгодным. Однако если за вашу программу возьмётся кто-то принципиальный (или идейный, или за весьма хорошие деньги), то он сломает что угодно.

Чтобы отвадить от вашей программы кулхацкеров, хватит защиты бинарников и цифровой подписи у запросов. А дальше уже смотрите, насколько вам выгодно защищаться.

▲ 1

Если вообще никто, то теоретически никак, но для затруднения этого процесса можно использовать криптографию и средства для запутывания исходного кода.

▲ 1

С помощью cURL можно передавать http(s) запросы.

Защитить передачу данных от подделок можно электронной цифровой подписью. Широкий набор криптографических инструментов, в том числе и ЭЦП предоставляет, например, Crypto++