Как защитить веб-API от несанкционированного использования

#node.js #api #http #encryption #authorization

#node.js #API #http #шифрование #авторизация

Вопрос:

Поскольку в прошлом я сам очищал веб-сайты, даже для онлайн-сообществ, мне всегда было довольно легко просто написать какой-нибудь инструмент на основе скриптов, который использует их HTTP-API и притворяется обычным пользователем приложения. Я смог сделать это для своих платежей по мобильному телефону (войти на веб-портал провайдера, загрузить счета-фактуры), для сайтов знакомств и некоторых других сайтов, просто проверив HTTP-трафик в браузере, а затем просто перестроив HTTP-запросы. Короче говоря: казалось, что всегда возможно и даже довольно легко напрямую использовать любой HTTP API, с которым я имел дело, без использования соответствующего клиента (веб-сайт, приложение, …).

Теперь перейдем к самому вопросу. Я разрабатываю мобильное приложение, а вместе с ним серверный компонент на основе HTTP-API. Приложение позволяет пользователям регистрироваться, изменять свой профиль, а также взаимодействовать друг с другом.

Чего я хочу добиться сейчас, так это того, что кому-то должно быть сложно или невозможно сделать то, что я только что объяснил. То есть не должно быть возможности использовать HTTP API без использования моего приложения. Я знаю, что, скорее всего, будет невозможно на 100% защитить API таким образом, чтобы приложение нельзя было обойти. Однако для меня было бы достаточно, если бы это было хотя бы достаточно сложно, чтобы обход приложения не был привлекательным. Как я могу это сделать?

То, о чем я думал, было чем-то вроде этого:

  • используйте что-то вроде генератора токенов RSA, где сервер и приложение генерируют одни и те же токены
  • токен должен предоставляться приложением в некотором HTTP-заголовке и проверяться сервером при каждом запросе
  • генератор инициализируется при регистрации пользователя (оставляя крошечное окно атаки)
  • после регистрации у кого-то не должно быть возможности перехватывать HTTP-запросы, а затем узнавать, как отправлять запросы в обход приложения

Однако я не нашел что-то вроде генератора программных токенов с открытым исходным кодом, оставив в покое для Node.JS . Это навело меня на другую идею:

Я мог бы реализовать некоторый псевдогенератор токенов, который просто работает над хешированием текущего времени вместе с некоторым значением соли, используя, например, MD5. Соль будет предоставлена приложению при регистрации, чтобы оно могло генерировать одни и те же «токены».

Добавит ли это некоторый уровень безопасности? Каковы наилучшие практические / проверенные подходы к решению такого рода проблем?

Я не эксперт по безопасности, поэтому был бы признателен за любые другие советы или рекомендации 🙂

Комментарии:

1. Это добавляет сложности, из-за чего выделенному реверс-инженеру потребуется еще пара минут, чтобы воссоздать протокол вне приложения. Я не думаю, что удаленную аттестацию можно использовать где-либо за пределами оборудования Intel и их SGX.

2. Хорошо, итак, если, например, в дополнение к соли я использую, например, имя пользователя или комбинацию имени пользователя, почты, соли, времени для хэширования, как это можно перепроектировать? Я имею в виду, конечно, что злоумышленник может перебирать все комбинации пользовательских свойств соль, которые могут быть использованы для хеширования, но для меня это не представляется возможным?

3. Злоумышленнику не нужно ничего применять грубой силой. Они декомпилируют собственное приложение или удаляют JS-код интерфейса. Затем они могут просто увидеть, как вы создаете свою технику запутывания, и воссоздать процесс в своей собственной среде автоматизации. Если это слишком сложно, они могут просто автоматизировать ваше приложение / интерфейс во многих инструментах автоматизации пользовательского интерфейса, что требует гораздо больших ресурсов при запуске.