我已经在 Google 和 SO 上搜索了几个小时,但没有找到与我现在面临的挑战相同的人,所以这里是:
我们有一个数据库,我们投入了大量金钱和精力来维护它。数据库中的数据可通过 REST-API 公开获得。我们还有一个使用此 API 的公共 javascript 网络应用程序,我们将其出售给大约 30-40 个客户。由于 API 中的数据对我们来说非常有value,我们希望尝试保护它,以便没有人可以从中抓取内容并制作自己的数据库副本。我们也不希望任何人在未经我们同意的情况下使用我们的 API 构建服务。同时,我们需要我们在http://www.example.com/theApp、http://www.example2.com/theApp、http://www.example3.com/theApp等的网络应用程序才能访问 API。没有用户参与。大家可以去http://www.example.com/theApp并获得网站的全部功能。API 也是只读的,因此我们不会担心任何试图污染我们数据的人。
javascript web 应用程序是使用 react.js 和 node.js 服务器构建的。当然,SSL 将用于服务器和客户端之间的所有通信。
我认为行不通的事情:
- 使用户登录以使用http://www.example.com/theApp。(没有额外的登录功能,所以这只会惹恼用户。)
- 在 Web 应用程序中存储密码/令牌。(javascript 中没有任何东西是安全的,但混淆代码是安全的。)
- 使 Web 应用程序客户端从身份验证服务器请求令牌。(这个请求也可以由敌对的客户端完成。)
- 将允许的 IP 列入白名单。(每个人都可以访问这些网站...)
- 将 URL 列入白名单。(URL 作为标头发送。标头可以被操纵。)
可能有效的事情(或至少是解决方案的一部分):
- 让 node.js 服务器应用程序代表客户端从身份验证服务器请求令牌。(但我仍然不知道这将如何防止恶意客户端向 node.js 服务器应用程序发出相同的请求)
- 混淆视听。(这可能会让大多数敌对用户望而却步,但更持久(和最熟练/最危险?)只会对挑战感到兴奋,并最终能够破解它。)
由于这是我们试图实现的相当复杂的事情,所以我开始相信这可能是不可能的,如果有人对该怎么做有一些建议,我将不胜感激。如果给出充分的理由,“不要这样做”是一个非常好的答案。我在这里更多的是概念性解决方案,但如果有人想具体了解软件,我们有一个带有 node.js、Nginx 和 PHP 的 Linux 环境。