当使用Breezejs时,有什么可以限制extend的使用,这样的用户无法访问敏感数据

当使用Breezejs时,有什么可以限制extend的使用,这样的用户无法访问敏感数据,breeze,Breeze,基本上,这是一篇相关文章: 我的第一个问题是关于某个人的,但是接受那里的asnwers,如果有人提供关于如何限制客户可见内容范围的示例或教程,我将非常感激 我从Knockout/Breeze模板开始,并根据我所做的更改了它。带着一个问题坐在一个几乎完成的项目上。安全 我已经修复了身份验证,正在进行授权工作,并试图弄清楚如何确保人们不能得到他们不想看到的东西 我在根模型上固定了第一层,成员只能看到他创建的或者是公共的东西。但是用户可以使用extend将查询组合在一起,以获取Object.Memb

基本上,这是一篇相关文章:

我的第一个问题是关于某个人的,但是接受那里的asnwers,如果有人提供关于如何限制客户可见内容范围的示例或教程,我将非常感激

我从Knockout/Breeze模板开始,并根据我所做的更改了它。带着一个问题坐在一个几乎完成的项目上。安全 我已经修复了身份验证,正在进行授权工作,并试图弄清楚如何确保人们不能得到他们不想看到的东西

我在根模型上固定了第一层,成员只能看到他创建的或者是公共的东西。但是用户可以使用extend将查询组合在一起,以获取Object.Member.identifications。这意味着他获得了所有公共物品的身份

是否有任何教程可以帮助我限制用户可能查询的内容。? 我是否应该用ObjectDto包装返回的对象,并在创建时验证它是否不包含敏感信息

这很好,这取决于我如何做,但一些教程将与一些指针很好

代码 控制器

    public IQueryable<Project> Projects()
    {
      

        //var q = Request.GetQueryNameValuePairs().FirstOrDefault(k=>k.Key.ToLower()=="$expand").Value;
       // if (!ClaimsAuthorization.CheckAccess("Projects", q))
          //  throw new WebException("HET");// UnauthorizedAccessException("You requested something you do not have permission too");// HttpResponseException(HttpStatusCode.MethodNotAllowed);

        return _repository.Projects;
    }
publicIQueryable项目()
{
//var q=Request.GetQueryNameValuePairs().FirstOrDefault(k=>k.Key.ToLower()==“$expand”).Value;
//if(!ClaimsAuthorization.CheckAccess(“项目”,q))
//抛出新的WebException(“HET”);//UnauthorizedAccessException(“您请求了一些您没有权限的内容”);//HttpResponseException(HttpStatusCode.MethodNotAllowed);
返回_repository.Projects;
}
_存储库

    public DbQuery<Project> Projects
    {
        get
        {
           
            var memberid = User.FindFirst("MemberId");
            if (memberid == null)
                return (DbQuery<Project>)(Context.Projects.Where(p=>p.IsPublic));

            var id =  int.Parse(memberid.Value);
            return ((DbQuery<Project>)Context.Projects.Where(p => p.CreatedByMemberId == id || p.IsPublic));
        }
    }
公共数据库查询项目
{
得到
{
var memberid=User.FindFirst(“memberid”);
if(memberid==null)
return(DbQuery)(Context.Projects.Where(p=>p.IsPublic));
var id=int.Parse(memberid.Value);
return((DbQuery)Context.Projects.Where(p=>p.CreatedByMemberId==id | | p.IsPublic));
}
}

查看如何将Web API的
[Queryable(AllowedQueryOptions=…)]
属性应用于方法或执行一些等效的限制性操作。如果您经常这样做,您可以将
QueryableAttribute
子类化以满足您的需要。涵盖这些场景

关闭一个或所有控制器查询方法上的可用选项非常容易

还请记住,您可以从操作方法内部访问请求查询字符串。您可以快速检查“$expand”和“$select”,并抛出自己的异常。阻止已知导航路径的扩展并不难(您可以创建白名单和黑名单)。最后,作为最后一道防线,您可以使用Web API操作过滤器或通过自定义JSON格式化程序过滤类型、属性和值

在数据隐藏/过滤中使用授权这一更大的问题我们将很快讨论。简而言之就是:“在你真正担心的地方,使用DTO”