breeze.js如何处理安全性和避免暴露业务逻辑

breeze.js如何处理安全性和避免暴露业务逻辑,breeze,Breeze,我们正在考虑构建企业应用程序 breeze的惊人之处在于,我们可以直接从客户端浏览器执行查询。这允许基于用户输入构造动态查询,而无需加载不必要的数据。我发现,使用Breeze,我们可以创建业务逻辑,在使用延迟加载策略时,可以将数据移动/传输减少1/10甚至更多。使用如下查询 万岁的微风 但是业务逻辑安全性呢, 例如,我们可以有一个存储库,在其中我们可以隐藏、隐藏和模糊我们的业务逻辑;然后使用MVC Web API控制器调用那些存储库C#类。因此,Breeze JavaScript与WebAPi控

我们正在考虑构建企业应用程序

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

万岁的微风

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

breeze.js是如何处理的


<>如果我们开始将查询和业务逻辑从控制器的C→微风JavaScript中移动,我们必须考虑到我们的系统是基于成员的。我认为,我们用JavaScript向客户机公开的查询越多,我们的软件就越容易受到攻击,我们就越告诉黑客如何入侵我们的网站并可能窃取信息。

安全是一个至关重要的问题。仔细考虑客户机上公开的数据和逻辑是明智的。我们如何才能将这些情绪提炼成一个适合于SO答案的具体问题

关于Breeze的任何内容都不应导致您向JavaScript客户端公开业务逻辑。您可以(也应该)在存储库和/或控制器方法中安全地锁定此类逻辑

但我很难理解客户机查询本身是如何需要保护的业务逻辑。对一个名字以“a”开头的客户进行查询时,危险在哪里

对于净资产>100000美元的客户的查询,您可能会感到担忧。但问题不在查询中。错误在于通过任何方式将此类客户信息暴露给未经授权的用户,无论是通过附加到查询的Breeze where子句还是调用名为GetCustomers()的服务

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

你写控制器。您编写存储库。您有权访问用户的权限。你完全可以控制自己,可以随心所欲地多曝光或少曝光

FWIW,您的Breeze
EntityManager
可以调用不返回
IQueryable
的服务方法。它可以调用Web Api控制器方法,如
IEnumerable GetCustomers()
Product GetProductForId(int-id)
。在我看来,在没有获得任何安全性的情况下,您将失去Breeze查询功能的灵活性。但这只是我的意见。微风会支持你的选择,不管是什么


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

想补充一点,如果您从服务器返回401代码,您可以通过使用webapi中的属性来限制未经授权的用户进行查询,只需弹出一个登录屏幕,并在用户登录后重新进行所需的工作


因此,用户可能会尝试获取订单数据,但除非获得授权,否则他无法获取该订单的数据

您可以使用breeze.js访问很多内容 首先,在这里检查我关于安全性的回答

此外,尽管breeze.js可以像客户端上的普通ORM一样使用(有时非常有用),但您应该将业务逻辑保存在web api控制器中,并使用OData查询仅公开必要的内容。 如果您需要任何数据操作逻辑,那么应该在服务器上使用特定的方法进行操作


<>只有UI逻辑应该出现在客户机上,如果您直接从客户机开始执行多个查询,也可以考虑有几个性能影响。展开实体图以加载更多结果,或者使用返回对象的更专门的方法。Breeze将对结果进行反思,并愉快地使用实体,而不会产生任何影响。

我想这里的问题是,如果存在不适合用户的行的查询。它打开了一罐虫子。当你把它连接到一个现有的应用程序上时,可能更令人担忧。但是,如果您在设计系统时考虑到breeze,我认为查询应该是精细的,这可能是一个重要的安全约束。。。而且,您必须在服务器上对用户有充分和确定的了解的情况下实施这一点。无论您如何构造服务器端API,都需要确保这一点。微风在这方面帮不了你什么忙。。。“但这也不妨碍我的工作。”沃德,我不明白你的答案。我认为查询工具确实暴露了风险,我不知道如何预防风险。假设服务器公开了与受限实体相关的非受限实体的查询入口点。我将编写客户端,使其永远不包含受限制的实体,但恶意客户端可能会请求它。如何编写服务器来防止这种情况?我完全同意我需要“施加必要的安全约束”和“在服务器上强制执行”,b