Как я могу защитить HTTP-запрос POST от получения только утвержденным клиентом javascript? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть URL, который будет принимать POST-данные и хранить их записи - это для аналитики. Мне нужно обезопасить это от любого человека в мире, начиная от POSTing до него, но какой возможный механизм аутентификации я могу использовать, чтобы безопасно раскрывать детали? Я не думаю, что javascript может получить доступ к любым секретным данным, не делая их публичными.

Я могу основать его на любом HTTP-заголовке, но все они могут быть подделаны, верно?

Если это помогает, клиент и сервер используют https.

Редактировать: я думаю, что мне нужно изложить проблему более явно; извините, я думал, что смогу объяснить это кратко, но это явно не встречается! Представьте себе следующее:

  1. Статическая страница на https://example.com/index.html содержит скрипт, https://example.com/script.js.

  2. Сценарий отправляет запрос на другой удаленный URL, например,

    ajax_call('https://stats.example.com/stats.php', 'some data');
    
  3. Сценарий stats.php просто записывает 'some data' в файл

Теперь недостаток в том, что любой может просто ПОСТАВИТЬ что-нибудь в stats.php, и он запишет в файл. Я хочу ограничить это только своим «клиентом», то есть https://example.com/index.html.

Если бы я мог, я бы сделал что-то подобное в stats.php:

if ($_SERVER["HTTP_REFERER"] == 'https://example.com') {
    do_stuff();
} else {
    die('not allowed');
}

но у меня всегда было впечатление, что HTTP_REFERER (и другие подобные заголовки) могут быть просто подделаны, так что это будет бессмысленно.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

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

Если браузер всех, кто посещает общедоступный веб-сайт, должен получить доступ к конечной точке, вы не сможете.

Браузер полностью находится под контролем пользователя.Они могут проверять все, что делает браузер.Затем они могут воссоздать его, используя другой HTTP-клиент.

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


Лучшее, что вы можете сделать, - это проанализировать данные, отправленные в API аналитики, на предмет обычных или невозможных моделей поведения.

0 голосов
/ 06 мая 2019

Вы можете ИСПОЛЬЗОВАТЬ CORS и, таким образом, ваш BackEnd может получать ТОЛЬКО ЗАПРОС от определенного ХОСТА / DOMAIN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...