В настоящее время у меня есть веб-сайт, размещенный на Pages, сервисе Cloudflare, который используется для размещения внешних веб-сайтов. Этот сервис не позволяет мне выполнять код в бэкенде.
В настоящее время я пытаюсь реализовать контактную форму, и мне нужно получать сообщения на мою личную электронную почту, когда кто-то заполняет форму и отправляет ее. Для этого я создал лямбда-функцию на AWS и предоставил ее через URL-адрес HTTPS.
JavaScript на моем внешнем интерфейсе отправляет запрос HTTPS на лямбда-функцию с сообщением, и эта лямбда-функция публикует сообщение в теме SNS, на которую подписана моя электронная почта.
В лямбда-функции я настроил CORS так, чтобы он принимал HTTPS-запросы только от моего доменного имени. Однако злоумышленник потенциально может подделать заголовки HTTPS-запроса, получить URL-адрес лямбда-выражения из исходного кода моего веб-сайта и начать вызывать лямбда-функцию.
Что я могу сделать, чтобы защитить лямбда-функцию и убедиться, что она принимает только HTTPS-запросы, сделанные внешним интерфейсом моего веб-сайта?
Спасибо!
Я рассматривал возможность переноса своего интерфейса на бессерверную службу, такую как AWS Amplify, но я не уверен, как защитить вызовы моих лямбда-выражений, поскольку JavaScript на моем веб-сайте в браузере пользователя выполняет вызовы.
Вы не можете.
HTTP — это протокол без сохранения состояния. Точно так же вы не можете сделать это для любого другого веб-сервиса (Lambda или нет).
Приложения JavaScript запускаются в браузере клиента, поэтому любой пользователь может просматривать ваше приложение, искать любые жестко закодированные ключи и использовать их для создания запроса API с помощью curl или библиотеки HTTP на любом языке программирования. Клиенты небезопасны по замыслу.
Если вы хотите защитить свою лямбда-функцию от несанкционированных вызовов API, вам необходимо выполнить аутентификацию и авторизацию пользователей (вот учебник). Это означает, что вам нужно будет реализовать создание/вход/выход пользователя, создавать файлы cookie, а также аутентифицировать и авторизовать каждый запрос.
В частности, в Lambda это можно сделать с помощью AWS Cognito, Auth0 или других инструментов в сочетании со шлюзом API, с помощью Lambda Authorizer или реализовать непосредственно в вашей функции.
Управление идентификацией и доступом — это целая дисциплина в разработке веб-приложений, поэтому здесь есть чему поучиться. Я бы посоветовал начать с любой популярной библиотеки на выбранном вами языке и учиться на ней.
На самом деле, Cloudflare Pages позволяет выполнять серверный код, используя функции Pages . Например, вы можете использовать функцию для приема данных формы и интеграцию с MailChannels для отправки. Существует также Discord Server, где вы можете узнать, как делать многие вещи с Cloudflare Pages, как с интерфейсом, так и с сервером.