Я работаю над веб-страницей, которая использует большое количество AJAX для связи с сервером. Сервер, в свою очередь, имеет обширный REST/JSON API, подвергая различные операции, вызываемые веб-клиентом.
Этот веб-сайт используется как анонимными, так и аутентифицированными пользователями. Как и следовало ожидать, вызовы веб-службы, выданные аутентифицированными пользователями, требуют аутентификации и, таким образом, защищены от неавторизованных пользователей или приложений.
Однако веб-сайт имеет множество функций, которые не требуют аутентификации, а некоторые из них используют анонимные веб-службы. Единственный способ, с помощью которого я запрещаю аутсайдерам звонить этим веб-сервисам, - это использовать токен CSRF. Я знаю, токен CSRF не очень полезен в этом отношении... с некоторым временем, вы можете понять, как потреблять веб-службы, даже если они используют токен CSRF.
Конечно, вы можете использовать CAPTCHA для предотвращения автономного использования приложений или ботов с помощью веб-службы. Однако любой человек сможет его использовать.
Совместное использование секретного ключа между клиентом и сервером, с другой стороны, будет бесполезным. Это из-за способности любого аутсайдера читать его из исходного кода веб-страницы.
Я хотел бы сделать эти веб-сервисы такими же сложными, как и для любого стороннего приложения. Что бы вы сделали, используя токен CSRF? Это звучит немного глупо, но эй, может быть, это глупо, и я просто теряю время.
Примечание: данное приложение использует браузер, а не "исполняемый" как клиент, этот вопрос не имеет отношения к обсуждению. Я не могу использовать секрет между сервером и клиентом (по крайней мере, насколько мне известно)