Подтвердить что ты не робот

Как breeze.js обрабатывает безопасность и избегает раскрытия бизнес-логики

Мы рассматриваем breeze js для создания корпоративных приложений.

Необычность бриза заключается в том, что мы можем выполнять запросы прямо из клиентского браузера. Это позволяет создавать динамические запросы на основе ввода пользователей без загрузки ненужных данных. Я обнаружил, что с помощью Breeze мы можем создавать бизнес-логику, которая уменьшает перемещение данных/передачу на 1/10 или даже больше при использовании ленивой стратегии загрузки. используя такие запросы, как эти

Урайский бриз!!!

Но как насчет безопасности Business Logic, Например, у нас может быть хранилище, в котором мы могли бы скрывать, скрывать и скрывать нашу бизнес-логику; а затем использовать MVC Web API-контроллеры, чтобы просто делать вызовы для этих классов С# для репозитория. поэтому Breeze JavaScript разговаривает с контроллером WebAPi, а контроллер WebApi разговаривает с репозиторием С#. Контроллеры всегда будут оставаться очень простыми и легко читаемыми, но в репозитории может оказаться много бизнес-логики для компании, использующей приложение. Поэтому, если хакер использует, например, консоль разработчика Google Chrome для проверки кода JavaScript, все, что он увидит, это такие вещи, как GetCustomers(), GetProductsForThisId (54). Существует не так много информации, которую можно увидеть (или украденной) там. Потому что 90% бизнес-логики будут жить в репозитории С# на сервере.

Как работает breeze.js?

Если мы начнем перемещать запросы и бизнес-логику "с контроллера С# на ветерок JavaScript", мы должны учитывать, что наша система основана на членстве. Я думаю, что чем больше запросов мы выставляем клиенту в JavaScript, тем более уязвимым становится наше программное обеспечение, и тем больше мы говорим хакерам, как взламывать наш сайт и, возможно, красть информацию.

4b9b3361

Ответ 1

Безопасность - это жизненно важная проблема. Целесообразно тщательно продумывать данные и логику, выставленные на клиенте. Как мы можем усовершенствовать эти чувства в конкретный вопрос, подходящий для ответа SO?

Ничто из Breeze не должно вызывать бизнес-логику для клиента JavaScript. Вы можете (и должны) безопасно блокировать такую ​​логику внутри своих репозиториев и/или методов контроллера.

Но я изо всех сил пытаюсь понять, как сами клиентские запросы - это виды бизнес-логики, которые нуждаются в защите. Где опасность в запросе для клиента, чье имя начинается с "А"?

Вы можете по праву беспокоиться о запросе для клиентов с чистой стоимостью > 100 000 долларов. Но ошибка не в запросе. Ошибка заключалась в том, чтобы подвергать такую ​​информацию о клиенте неавторизованным пользователям любыми способами, будь то через приложение Breeze where, добавленное к запросу, или вызов службы с именем GetCustomers().

Место блокировки несанкционированного доступа к клиентам находится на сервере, и вы можете легко это сделать внутри метода действий контроллера Breeze, возвращающего IQueryable, как вы можете в своем методе GetCustomer(). Бремя ложится на вас в любом случае, чтобы наложить необходимые ограничения безопасности на ваш контроллер и в рамках методов, которые вы раскрываете.

Вы пишете контроллер. Вы записываете репозитории. У вас есть доступ к пользовательским разрешениям. Вы полностью контролируете бескомпромиссную способность выставлять столько или меньше, сколько хотите.

FWIW, ваш Breeze EntityManager может вызывать методы службы, которые не возвращают IQueryable<Customer>. Он может вызывать методы контроллера Web Api, такие как IEnumerable<Customer> GetCustomers() или Product GetProductForId(int id). По-моему, вы потеряете гибкость запросов запросов Breeze, не получая никакой безопасности. Но это только мое мнение. Бриз будет поддерживать ваш выбор, каким бы он ни был.

Я был бы рад попытаться ответить на более конкретный вопрос "как".

Ответ 2

хотел бы добавить, что вы можете ограничить пользователей, которые не авторизованы с помощью запроса, используя атрибуты в webapi, если вы получите код 401 с сервера, просто запустите экран входа в систему и повторите работу, необходимую после входа пользователя в систему

чтобы пользователь мог попытаться получить данные о заказе, но он не получит его, если он не уполномочен делать это

Ответ 3

Вы можете использовать много вещей, используя breeze.js Прежде всего, проверьте мой ответ на безопасность здесь.

Как обрабатывать авторизацию с помощью Breeze JS?

Кроме того, хотя breeze.js можно использовать как обычный ORM на клиенте (что может быть очень полезно время от времени), вы должны поддерживать свою бизнес-логику в контроллерах web-api и выставлять только необходимые вещи, используя запросы OData. Если вам нужна логика управления данными, вы должны сделать это на сервере, используя для этого определенный метод.

На клиенте должна присутствовать только логика пользовательского интерфейса, а также учитывать, что при запуске нескольких запросов непосредственно от клиента возникает несколько последствий для производительности. Либо разверните граф объектов, чтобы загрузить больше результатов, либо используйте более специализированные методы, возвращающие объект. Бриз будет анализировать результаты и поглощать объекты без каких-либо последствий.