Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security Breeze.js-保护IQueryable调用_Security_Iqueryable_Breeze - Fatal编程技术网

Security Breeze.js-保护IQueryable调用

Security Breeze.js-保护IQueryable调用,security,iqueryable,breeze,Security,Iqueryable,Breeze,在这方面我是个新手,但我已经了解了使用Breeze暴露IQueryable的安全风险。请有人向我推荐一些保护JavaScript中公开的IQueryable集合的最佳实践(或者仅仅是一些建议)?谢谢。我不会通过IQueryable公开任何应该通过随机查询发送给客户端的数据。因此,可以将投影或DTO曝光 我不确定这是否回答了你的问题。。。你担心什么“安全风险” 我也支持这个问题。但要在沃德提出的问题中添加一些细节: 在保护可查询的服务时,会想到两个传统问题: 1) 垂直安全性:当前登录的用户(基于

在这方面我是个新手,但我已经了解了使用Breeze暴露IQueryable的安全风险。请有人向我推荐一些保护JavaScript中公开的IQueryable集合的最佳实践(或者仅仅是一些建议)?谢谢。

我不会通过IQueryable公开任何应该通过随机查询发送给客户端的数据。因此,可以将投影或DTO曝光


我不确定这是否回答了你的问题。。。你担心什么“安全风险”

我也支持这个问题。但要在沃德提出的问题中添加一些细节:

在保护可查询的服务时,会想到两个传统问题:

1) 垂直安全性:当前登录的用户(基于用户身份或角色)不允许在UI中看到哪些项目。这些需要从可查询列表中删除。在我看来,这可以作为queryable ActionFilter魔法的一部分,通过在返回的IQueryable上链接一些排除逻辑来完成。 2) 水平安全性:某些模型包含不适合登录用户查看(和/或编辑)的字段。这更难处理,因为这不仅仅是从返回的IQueryable中删除实例的问题。返回的类具有不同的形状,因此可以由json格式化程序根据安全性忽略字段(AFAIK破坏了breeze元数据)或返回DTO来处理。在这种情况下,由于DTO不存在于元数据中,因此它不是一个完整的生命周期(可更新)类?(我是问这个问题,不是说它)

我希望看到内置支持或易于实现的配方(2)。也许有一些示例代码可以修改客户端元数据,使DTO与模型对象完美结合。newset VS 2012 SPA模板(在TodoList应用程序中)似乎在可查询和插入/更新端将数据推送到模型对象的变体。这类似于传统的MVC模型视图


最后,我将添加一个请求,以自动处理插入和更新的套印安全问题。这是2)的互惠方面。某些用户不能编辑某些字段

了解更多让你担心的事情会有帮助。如果类型为“StatusCodes”,则无需太多担心。如果是“客户”,则需要更多思考。但无论是否可行,情况都是如此。如果你列举一些具体的问题,那就最好了。。。然后我们可以“回答”他们。请做!我们都欢迎这种特殊性。可能重复的有价值的观察结果。一个大话题。。。我希望在未来几个月内解决这个问题。你关于“垂直安全”的建议可以;很多时候,您可以将基于角色的筛选添加到查询方法本身中,无论是在控制器方法中还是(更好)在子类ContextProvider中,后者将业务逻辑移出控制器并移入业务模型。请参阅下一篇评论,了解对食谱的“水平”“是”的看法。请查看Julie Lerman的Jan MSDN文章,该文章也涉及约束EF模型以适应该领域。正如您所注意到的,当某些用户不应该看到某些值时,这并没有帮助。Json.NET序列化程序的
ContractResolver
可能是一个不错的选择。您也可以只编写一个不可查询的服务方法,返回请求类型的IEnumerable;您可以在该方法内部进行查询,并在将结果返回到客户端之前以细粒度的方式对结果进行操作。你失去的只是小田;仍然可以发送参数。待续…关于:套印。。。你想让我们如何实现自动化?您的意思是防止对未通过查询公开的属性进行更新吗?如果是这样,首先要看的是缩小实体表面(参见Julie的文章)。或者你的意思是发布到他们可以看到但不应该触摸的属性?当然,你知道这方面的规则。保存之前的
方法是否不足?它们的存在部分是为了这个目的。无论如何,我们需要提供一些指导和选择。在回到纯DTO和命令/查询分离之前,您可以做很多事情。。。这是你的终极后盾。我想补充一点,一种基于动态服务器的语言在这里真的会大放异彩,因为我们可以删除用户不允许看到的对象的属性。