在编写基于 Datomic 和 Clojure 的应用程序时,对等点似乎可以不受限制地访问数据。如何构建一个用户 A 无法访问用户 B 私有数据的多用户系统?
我知道我可以在 Clojure 中编写查询,以便只返回用户 A 的私人数据......但是是什么阻止了恶意用户破解二进制文件以查看用户 B 的私人数据?
更新
根据@Thumbnail 的回答和 John P Hackworth 博客的链接,Clojure/Datomic 应用程序的状态实际上缺乏安全性。
让我更清楚地说明我看到的问题,因为我没有看到任何解决方案,这是引发这个问题的原始问题。
Datomic 有一个数据存储、一个交易者和对等点。对等点位于用户的计算机上,并针对数据存储中的数据运行查询。我的问题是:如何限制对数据存储中数据的访问。由于数据存储是愚蠢的,实际上只是存储数据,我不确定如何提供访问控制。
当 AWS S3 用作数据存储时,客户端(对等方)必须在访问 S3 之前进行身份验证,但是一旦通过身份验证,对等方就无法访问所有数据!?仅限于它运行的查询,如果用户想要获取另一个用户的数据,他们可以更改客户端中的代码(二进制),以便查询以不同的用户名运行,对吗?要清楚......访问控制不只是查询的条件吗?或者是否存在数据存储识别的用户特定连接并且数据存储限制了哪些数据可见?
我错过了什么?
在像 Rails 这样的传统 Web 框架中,服务器端代码限制对数据的所有访问,并对用户进行身份验证和授权。用户可以更改 URL 或客户端代码,但除非用户提供了正确的凭据,否则服务器将不允许访问数据。
由于 Datomic 中的数据存储是愚蠢的,它似乎缺乏基于每个用户限制访问的能力,应用程序(对等方)必须这样做。我不想相信用户的行为,也不想尝试获取其他用户的信息。
一个简单的例子是银行系统。当然,用户将通过身份验证......但在那之后,是什么阻止他们修改客户端代码/二进制文件以更改数据查询以从数据存储中获取其他用户的帐户信息?
更新 - 模型
这里有两个关于 Datomic 和 Clojure 如何工作的可能模型……第一个是我当前的模型(在我的脑海中)。
- 用户的计算机运行客户端/对等方,该客户端/对等方具有查询并完全访问在客户端启动之前对用户进行身份验证的数据存储,从而将用户限制为我们拥有凭据的用户。
- 用户的计算机具有与驻留在服务器上的对等点交互的接口(webapp)。查询在服务器上,用户不能修改,因此访问控制本身受到运行对等服务器的安全性的访问控制。
如果第二种模型是正确的,那么我的问题就得到了回答:用户无法修改服务器代码并且服务器代码包含访问控制......因此,我认为驻留在用户计算机上的“对等方”实际上驻留在应用服务器。