2

基本上这是作为相关帖子之一出现的:

使用breezejs 在javascript 中查询信息不是很危险吗?

我的第一个问题是关于某人的,但是接受那里的回答,如果有人有关于如何限制客户可见范围的示例或教程,我将不胜感激。

我从 Knockout/Breeze 模板开始,并根据我正在做的事情对其进行了更改。坐在一个几乎完成的项目上,有一个问题。安全。我已经修复了身份验证,并且正在努力进行授权,并试图弄清楚如何确保人们无法获得不打算让他们看到的东西。

我将第一层固定在根模型上,即成员只能看到他创建的或公开的东西。但是用户可能会使用扩展来获取 Object.Member.Identities 的查询。这意味着他获得了公共对象的所有身份。

是否有任何教程可以帮助我限制用户可能查询的内容。?我应该用 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;
    }

_存储库

    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));
        }
    }
4

1 回答 1

1

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

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

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

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

于 2013-05-22T09:01:57.297 回答