API защиты данных ASP.NET Core с угловым интерфейсом

В настоящее время я разрабатываю веб-приложение SPA с использованием внешнего интерфейса Angular 8 и внутреннего интерфейса ASP.NET Core. Я использую .NET Core Data Protection Api для защиты идентификаторов объектов, прежде чем возвращать их обратно клиенту angular. В моем приложении есть страница, которая обращается к API для получения категорий.

Каждая категория в списке возвращаемых категорий имеет свойство Id, которое представляет собой защищенную строку (защищенную с помощью .NET Core Data Protection Api). Эти категории являются источником данных для раскрывающегося списка на странице. Свойство Id - это атрибут значения каждой опции в раскрывающемся списке.

На той же странице у меня есть еще один вызов API, чтобы получить выбранную категорию вошедших в систему пользователей. Эта категория является тем же объектом, что и категории, упомянутые выше (вместе с защищенным свойством Id).

Что я хочу сделать сейчас, так это установить выбранное значение раскрывающегося списка с выбранной категорией для пользователя. Поскольку я использую Data Protection Api, все зашифрованные идентификаторы в раскрывающемся списке будут отличаться от идентификатора выбранной категории, и ни один из них не будет соответствовать идентификатору выбранной категории для пользователя. Итак, на данный момент у меня нет возможности выбрать вариант в раскрывающемся списке.

Таким образом, возникает вопрос, используя .NET Core DataProtection Api, как я могу выполнить отдельные вызовы Api и в каждом вызове убедиться, что, когда я защищаю конкретное целочисленное значение, полученные защищенные строки (если идентификаторы одинаковы) идентичны , поэтому я могу успешно сравнить их на клиенте.


person BryMan    schedule 14.09.2020    source источник


Ответы (1)


Я бы не стал использовать API защиты данных для шифрования / защиты целочисленных значений во время выполнения. Это не даст вам очень хороших результатов. Лучше иметь в своей базе данных, например, столбец GUID, который вы используете во внешнем интерфейсе, а внутри вы используете целочисленный идентификатор.

По сути, добавьте новый столбец, установите для него GUID и используйте его в качестве идентификатора категории для пользователей API.

Я не понимаю, почему вам нужно зашифровать свои ID-значения для раскрывающегося списка. Какой вектор атаки вы пытаетесь предотвратить?

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

Можно, например, использовать GUID для представления элементов (например, категорий, идентификаторов пользователей, идентификаторов ресурсов) для предотвращения атаки перечислением. Но это не шифрование.

person Tore Nestenius    schedule 12.10.2020
comment
Спасибо за ваш ответ, но я думаю, что это противоречит цели, мне не нужен статический идентификатор, который можно просто скопировать и который никогда не изменится. API защиты данных изменяет защищенную строку каждый раз, когда делается запрос / ответ. Я думаю, что использование api защиты данных немного более безопасно, учитывая тот факт, что значение никогда не будет таким же, как предыдущее. Можете ли вы объяснить, почему Data Protection Api не дает вам хорошей производительности, у меня пока не было проблем с ним. - person BryMan; 13.10.2020
comment
В масштабах производства шифрование отдельных значений в реальном времени - плохая идея, потому что это требует времени и, вероятно, того не стоит. Я обновил свой ответ, надеюсь, что это приемлемый ответ. - person Tore Nestenius; 14.10.2020