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

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

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

Ура ветерок!!!

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

Как breeze.js справляется с этим?

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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