我使用expressJs开发了简单的REST API。我正在使用React作为我的客户端应用程序。所以问题是任何人都可以看到我的API端点,因为react应用程序在客户端。因此,他们还可以从我的REST API发出请求并获取数据。(可能他们会使用我的API构建自己的客户端应用程序。(我看到了一些关于这方面的问题,但找不到任何全面的答案。应该如何处理此类安全问题?是否可以只允许我的客户端应用程序访问API?如果不是这样的话,使用REST API的大品牌是如何阻止这种情况的?(此外,我的产品中也没有用户身份验证场景。人们可以访问和使用网站。他们不需要注册(。
如果如您在评论中所述,您自己网站上的用户被允许使用您网站的API,而不允许非现场使用(例如其他网站、wget
/curl
等(,则您需要确保设置正确的CORS规则(禁止跨来源使用API(和CSP规则(防止用户插入的脚本代理您的API(,您还需要确保只允许来自具有活动会话的连接的API调用(因此,即使您不需要用户身份验证:也可以使用会话管理器,这样您就可以判断是否有人登录您的网站并在开始调用API端点之前设置了会话cookie(。
会话管理和CORS自带express(请参阅https://expressjs.com/en/resources/middleware/session.html和https://expressjs.com/en/resources/middleware/cors.html),对于CSP,以及许多其他安全层,如HSTS、XSS过滤等,您通常使用头盔。
身份验证可以是一种方法,但可以绕过它。另一种方法是,您可以创建一个严格阻止跨来源请求的代理服务器,因此它会阻止来自其他域的请求向您的API发出请求,您可以从该代理服务器发出API调用。通过这种方式,您的API服务器端点也不会受到损害。