4

乍一看,OData 似乎只会吸引“开放”数据库,并且永远不会在需要安全的环境中使用,尤其是金融或政府客户。

这是当前版本的 OData/WCF 的正确观点吗?如果没有,你能分享我需要改变这种观点的任何东西吗?

更新

当前关注的示例包括:

  • 增加 SQL 注入的可能性
  • 附加数据验证(复杂的业务逻辑)
  • 未经授权访问数据
  • 增加“原始转储”数据的能力
    • 我的意思是使用 OData 获取 HR 数据更容易,然后是屏幕抓取传统的 ASP.net 页面

更新 2

我也可以执行业务规则吗?例如格式正确的 SSN、电话或 Zip。如何确保填写所有字段?

4

3 回答 3

7

oData 只是一种通过开放 API 公开结构化数据的方式。它不要求任何特定形式的安全;可以拥有完全开放的数据集(如 wiki 数据库)或世界可读但私有可写的数据集(如国会议员投票的数据库,因此任何人都可以阅读它,但只有您可以更新它)。它还支持更复杂的安全结构(例如允许客户仅查询自己的历史记录的视频租赁商店)。

关于您的具体问题:

  • 如果您使用 ADO.NET 数据服务作为您的 oData 服务器,则根本不可能进行 SQL 注入。传入的 oData 请求被解析,然后传递给一个IQueryable,它正确地转义了所有值。
  • 业务层/数据层验证保持不变。oData 只是为数据层(或业务层,如果它看起来像数据库)提供了一个 API。
  • 除非您允许,否则无法未经授权访问数据。ADO.NET 数据服务的默认设置是不允许任何访问(甚至是只读访问),这会强制您明确授权所有访问。
  • “原始转储”场景正是oData如此有用的原因!它是一种允许通过网络有效查询数据源的协议,而不是依赖于脆弱的屏幕抓取“解决方案”。如果您不希望有人获得信息,请不要发布它。

Right now (to my knowledge), ADO.NET Data Services is the only oData provider available, and it's secure by default. I suppose that someone else could write an oData provider that wasn't secure by default or allowed SQL injection, but that would be foolish.

Also, remember that oData is completely divorced from the concept of authentication. It's up to you to use whatever authentication makes sense for your API. There's a great recent series of blog posts from the WCF team that address how oData works with various forms of authentication.

于 2010-08-17T16:06:20.450 回答
3

What's your business case for using OData? OData primarily exists to expose your data in a platform agnostic manner... so that .NET, Java, Php, Python, REST, etc clients can all access your data. Is that your use-case?

Or are you trying to expose your data via a service layer (kind of an SOA approach) so that your clients (which you control) are better decoupled from your data sources. In that case, OData may not be the right solution. I looked at OData as part of a data service layer and decided it is too slow. I'm now looking at Devforce which implements service-based access for Entity Framework models (via their BOS service)... full CRUD operations including LINQ to service-hosted model.

Security is to you desired level is possible either view OData or via DevForce. Pick the correct data-remoting solution, then research the correct security implementation.

于 2010-10-25T17:02:49.530 回答
1

当然,您可以在政府解决方案中使用它。OData 只是一种访问数据的方式,它与确保信息安全无关。您必须在传输级别 (SSL) 而不是在应用程序级别(为应用程序提供登录名和密码)实现安全性。

有很多方法可以解决这个问题。一个例子是,如果您使用 SSL,您可以强制您的客户端提供客户端证书并让其进行身份验证。一旦此人获得身份验证,您就可以使用您的应用程序来限制他们可以看到的内容(也许他们只能看到他们的客户信息,因此所有查询都会自动限制该人看到该信息。)

于 2010-08-17T14:26:21.420 回答