gpt4 book ai didi

asp.net-web-api - 如何加强 ASP.NET WebApi OData 服务以防止滥用?

转载 作者:行者123 更新时间:2023-12-03 22:52:58 29 4
gpt4 key购买 nike

我喜欢 OData,我特别高兴它被 ASP.NET Web API 采用。

我创建了一些供内部应用程序使用的服务,但从未供公众使用。主要原因是 OData 的开放性似乎使其很难“安全”地防止滥用。

最具体地说,我担心鉴于运行任意查询的能力,用户可能会表达复杂的查询,这会给操作系统带来压力,以至于对所有其他用户的体验都不好。

在 WebApi Controller 中,OData 端点公开如下:

public class OrderController
{
[Queryable]
public IQueryable<Orders> Get()
{
// Compose and return the IQueryable<Orders>
}
}

这可以完全控制查询的组合和执行过程,但通过复杂的 IQuerable<T> 实现界面。这使得向用户提供信息的子集变得微不足道,例如附加一个 Where仅包含他们有权访问的记录。

有没有IQueryable<T>可以包装现有 IQuerable<T> 的实现实例来限制用户可以运行的查询?我最感兴趣的是限制查询的复杂性,但我也希望能够阻止用户遍历与他们不应访问的资源的关联。

最佳答案

我想您会很高兴了解到在 RTM 中,我们添加了一些选项来让您自定义要向用户公开的查询类型。所以你可以这样做,例如:

[Queryable(
AllowedFunctions = AllowedFunctions.AllStringFunctions,
AllowedLogicalOperators = AllowedLogicalOperators.Equal,
AllowedOrderByProperties = "ID")]

并以几种常见的方式限制您的查询。如果您想进一步限制查询,可以插入验证 Hook ,例如 ODataQueryValidator 或通过重写 [Queryable]< 上的 ValidateQuery 方法 属性。

您可以使用我们的夜间构建来访问这些功能,或者自己构建最新的部分。

关于asp.net-web-api - 如何加强 ASP.NET WebApi OData 服务以防止滥用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316072/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com