我正在开发一个带有React的Web应用程序和一个带有Node.js / Express的GraphQL API。我想使API更安全,以便更难以从浏览器上的Web应用程序获取数据的API请求。我知道如何与注册用户一起做。但是如何使非注册用户仍然能够访问应用程序所需的一些基本数据?
是否可以在Web应用程序中放置某种键 - 因此可以通过在浏览器中嗅探网络开发工具并在Postman中复制来为其他人复制API调用? SSL / TLS是否也保护该浏览器工具中的请求?或使用像标准"非注册访问者的用户?
它是一个带有next.js的服务器端网络应用
我知道没有100%安全的api,但可能会使未经授权的访问变得更加困难。
编辑: 我不确定这是否是关于CSRF的问题,因为它不是关于访问用户数据或通过恶意网站等更改数据。但是关于其他人试图使用网站数据(所有GET请求到API)并且可以轻松在我的api上构建自己的网络应用程序。因此,没有人可以通过简单的邮递员请求轻松查询我的api。
答案 0 :(得分:0)
快速回答是不可以的。
如果您试图阻止可以被描述为合法用户形式访问您的API,您可以真正做到这一点。在滥用api之前,他们总是可以伪造相同的逻辑并首先点击你的网页。如果这是你试图阻止你最好的赌注是为api添加速率限制,以防止单个用户向你的api提出太多请求(我是ralphi的作者和 express-rate-limit非常受欢迎。)
但是,如果您实际上是在试图阻止其他网站形式泄露并向用户提供内容,那么实际上更容易解决。
大多数浏览器发送Referrer header请求,您可以检查此标头,并看到请求实际上来自您自己网站上的用户(此技术称为Leech Protection)。
网站可以尝试向您的api提供代理请求,但由于它们都来自同一个IP,因此它们会达到您的速率限制,并且在被阻止之前他只能为少数用户提供服务。
Leecher网站可以做的一件事就是尝试缓存你的API,这样他就不必提出这么多请求。如果这是一个可能的情况,你回到原点,你可能需要手动阻止他的IP一旦你发现这种滥用。我还会检查他的法律原因是否可能违法。
与Referrer类似的另一个选项是使用samesite个Cookie。他们只会在请求直接来自您的网站时发送。它们可能比推荐者更可靠,但并非所有浏览器都真正尊重它们。