我们正在考虑使用breeze js来构建企业应用程序。

轻而易举的是,我们可以直接从客户端浏览器执行查询。这允许基于用户输入构造动态查询,而无需加载不必要的数据。我发现使用Breeze可以创建业务逻辑,从而在使用延迟加载策略时将数据传输/传输减少1/10甚至更​​多。使用像these这样的查询

万岁的微风!!!

但是业务逻辑安全性如何?
例如,我们可以有一个存储库,在其中可以隐藏,隐藏和模糊我们的业务逻辑。然后使用MVC Web API Controller 仅调用那些存储库C#类。因此,Breeze JavaScript与WebAPi Controller 通信,而WebApi Controller 与C#存储库通信。 Controller 将始终保持非常简单和易于阅读,但是存储库最终可能会为使用该应用程序的公司提供许多业务逻辑。因此,例如,如果黑客使用Google Chrome开发人员的控制台检查JavaScript代码,则他/她将看到的仅是GetCustomers(),GetProductsForThisId(54)之类的东西。那里看不到(或被盗)的信息太多。因为90%的业务逻辑将驻留在服务器上的C#存储库中。

breeze.js如何处理呢?

如果我们开始将查询和业务逻辑“从 Controller 的C#转移到轻巧的JavaScript”,则必须考虑我们的系统是基于成员资格的。我认为我们用JavaScript暴露给客户端的查询越多,我们的软件就越容易受到攻击,并且我们告诉黑客的方法越多,它们如何入侵我们的网站并可能窃取信息。

最佳答案

安全是至关重要的问题。仔细考虑客户端公开的数据和逻辑是明智的。我们如何才能将这些情绪转化为适合SO答案的具体问题?

Breeze的任何内容都不应使您向JavaScript客户端公开业务逻辑。您可以(并且应该)在存储库和/或 Controller 方法中安全地锁定此类逻辑。

但是我很难理解客户端如何查询自己是需要保护的业务逻辑。查询名称以“A”开头的客户的危险在哪里?

您可能会担心查询净值大于$ 100,000的客户。但是故障不在查询中。错误可能是通过任何方式将此类客户信息暴露给未经授权的用户,无论是通过附加到查询的Breeze where子句还是通过调用名为GetCustomers()的服务。

阻止未经授权访问客户的位置位于服务器上,您可以在Breeze Controller 操作方法中轻松地做到这一点,就像在GetCustomer()方法中返回IQueryable一样。在这两种情况下,您都必须承担负担,以在 Controller 和公开的方法中施加必要的安全性约束。

您编写 Controller 。您编写存储库。您有权访问用户的权限。您可以完全掌控,并且拥有毫不妥协的曝光能力,可以根据自己的意愿进行曝光。

FWIW,您的Breeze EntityManager可以调用不返回IQueryable<Customer>的服务方法。它可以调用Web Api Controller 方法,例如IEnumerable<Customer> GetCustomers()Product GetProductForId(int id)。我认为您将失去Breeze的查询工具的灵活性,而不会获得任何安全性。但那只是我的个人意见。无论选择哪种方式,Breeze都会支持您的选择。

我很乐意尝试回答一个更具体的“如何”问题。

关于breeze - breeze.js如何处理安全性并避免暴露业务逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13662496/

10-12 19:46