Как обращаться с AWS Усилить безопасность веб-приложения? - PullRequest
0 голосов
/ 10 апреля 2020

Если я использую AWS Amplify & DynamoDB с веб-приложением Angular, как мне ограничить доступ к моим ресурсам Amplify, чтобы они не могли быть доступны извне моего Angular приложения?

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

1 Ответ

0 голосов
/ 11 апреля 2020

Это довольно широкий вопрос (я нахожусь на грани того, слишком ли он широк для переполнения стека). Но вот что:

Защита ваших (частных) ресурсов потребует от вашего веб-сайта аутентификации (authN) и, возможно, авторизации (authZ). Ознакомьтесь с этим объяснением этих понятий :

Проще говоря, аутентификация - это процесс проверки того, кем является пользователь, а авторизация - это процесс проверки того, к чему у него есть доступ. .

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


Самым распространенным способом достижения этого с помощью Amplify является использование Cognito . Cognito состоит из двух основных частей:

Пользовательские пулы Cognito : обрабатывать аутентификацию. Они являются хранилищем пользовательских идентификаторов, и Amplify использует их для получения токенов аутентификации . Они могут передать свою настоящую работу по аутентификации стороннему провайдеру идентификации , например, Google или Facebook.

Cognito Identity Pools : обрабатывать authZ. Они представляют собой сопоставление идентификаторов пользователей (связанных в пул пользователей) с учетными данными IAM .

Пулы Cognito ID не нужны , если используется API Шлюз , который может предоставлять authZ напрямую из токенов аутентификации.


Основная уязвимость заключается в том, что моя конфигурация Amplify представлена ​​в Angular коде

Это фундаментальная часть веб-разработки. Ваш клиент должен всегда знать, какие конечные точки использовать для аутентификации и авторизации. Хитрость в том, что конечные точки полезны, только если у пользователя есть учетные данные для аутентификации. Это точно поведение каждой страницы входа в сеть: любой может попробовать , чтобы войти на любую страницу входа publi c. Но если у вас нет учетных данных, конечная точка отказывается аутентифицировать вас.

С точки зрения другой конфигурации, если вы действительно хотите, вы можете подождать, пока после authN / authZ появится предоставить клиенту информацию о том, где найти его ресурсы, такие как «Динамо». Но это вполне может быть излишним; Вы должны тщательно взвесить, насколько вы параноидальны, чтобы определить, стоит ли скрывать идентичность внутренних ресурсов, к которым неавторизованные пользователи не смогут получить доступ.


Редактировать в ответ на комментарии:

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

Да! Более простой способ сделать это - выполнить аутентификацию в вашем приложении, получить полученные учетные данные и использовать их напрямую через консоль для ручного выполнения операций. Но опять же, это фундаментальное ограничение взаимодействия клиент-сервер: все, что вы предоставляете клиенту (включая учетные данные), может использоваться любым способом, который хочет клиент, потому что вы не можете контролировать интерфейс конец . Чтобы обойти это, нужно ограничить права, которые вы предоставляете пользователю на серверной стороне : путем строгого ограничения операций, учетные данные которых разрешают пользователю выполнять.

Другой способ думать об этом в том, что даже если вы можете запретить пользователю использовать учетные данные за пределами вашей указанной c передней страницы, он может написать скрипту боту, чтобы он вручную нажимал кнопки или вводил мусор. Поскольку вы не можете контролировать, какие действия будет предпринимать пользователь, единственное, что вы можете сделать, - это убедиться, что он преуспевает только в том, что вы хотите, с помощью соответствующих разрешений.

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