Защитите бессерверную серверную часть с помощью AWS Lambda

В настоящее время у меня есть веб-сайт, размещенный на Pages, сервисе Cloudflare, который используется для размещения внешних веб-сайтов. Этот сервис не позволяет мне выполнять код в бэкенде.

В настоящее время я пытаюсь реализовать контактную форму, и мне нужно получать сообщения на мою личную электронную почту, когда кто-то заполняет форму и отправляет ее. Для этого я создал лямбда-функцию на AWS и предоставил ее через URL-адрес HTTPS.

JavaScript на моем внешнем интерфейсе отправляет запрос HTTPS на лямбда-функцию с сообщением, и эта лямбда-функция публикует сообщение в теме SNS, на которую подписана моя электронная почта.

В лямбда-функции я настроил CORS так, чтобы он принимал HTTPS-запросы только от моего доменного имени. Однако злоумышленник потенциально может подделать заголовки HTTPS-запроса, получить URL-адрес лямбда-выражения из исходного кода моего веб-сайта и начать вызывать лямбда-функцию.

Что я могу сделать, чтобы защитить лямбда-функцию и убедиться, что она принимает только HTTPS-запросы, сделанные внешним интерфейсом моего веб-сайта?

Спасибо!

Я рассматривал возможность переноса своего интерфейса на бессерверную службу, такую ​​как AWS Amplify, но я не уверен, как защитить вызовы моих лямбда-выражений, поскольку JavaScript на моем веб-сайте в браузере пользователя выполняет вызовы.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не можете.

HTTP — это протокол без сохранения состояния. Точно так же вы не можете сделать это для любого другого веб-сервиса (Lambda или нет).

Приложения JavaScript запускаются в браузере клиента, поэтому любой пользователь может просматривать ваше приложение, искать любые жестко закодированные ключи и использовать их для создания запроса API с помощью curl или библиотеки HTTP на любом языке программирования. Клиенты небезопасны по замыслу.

Если вы хотите защитить свою лямбда-функцию от несанкционированных вызовов API, вам необходимо выполнить аутентификацию и авторизацию пользователей (вот учебник). Это означает, что вам нужно будет реализовать создание/вход/выход пользователя, создавать файлы cookie, а также аутентифицировать и авторизовать каждый запрос.

В частности, в Lambda это можно сделать с помощью AWS Cognito, Auth0 или других инструментов в сочетании со шлюзом API, с помощью Lambda Authorizer или реализовать непосредственно в вашей функции.

Управление идентификацией и доступом — это целая дисциплина в разработке веб-приложений, поэтому здесь есть чему поучиться. Я бы посоветовал начать с любой популярной библиотеки на выбранном вами языке и учиться на ней.

На самом деле, Cloudflare Pages позволяет выполнять серверный код, используя функции Pages . Например, вы можете использовать функцию для приема данных формы и интеграцию с MailChannels для отправки. Существует также Discord Server, где вы можете узнать, как делать многие вещи с Cloudflare Pages, как с интерфейсом, так и с сервером.

Другие вопросы по теме