由于在浏览器中运行的代码的开放性,实际上没有办法直接执行此操作。您可以要求 APIkey 或类似的东西,但如果您在浏览器中使用这些 APIkey,则它们不是秘密,因此任何人都可以从自己的应用中发现并使用它们。
网站处理此问题的最常见方式是要求在您的 websocket 连接上进行用户身份验证(通常可以利用可能已经通过已经存在的 cookie 完成的网页用户身份验证)。这显然需要用户在您的服务上拥有一个帐户并登录该帐户。然后,如果您发现某个特定连接被滥用,您可以禁止该用户的凭据进入该服务。
这并不能阻止某人设置使用他们自己的凭据来使用您的 API 的流氓服务器进程,但是如果您检测到潜在的滥用,那么您至少有一种机制可以将它们锁定(至少是暂时的,直到他们做出一个新帐户)。
您还可以确保您的服务不接受跨域请求。这可以防止其他基于浏览器的应用程序直接从浏览器使用您的 API。它不会阻止脚本(在浏览器外部或服务器上运行)使用您的 API。
您可以创建服务条款,允许您禁止任何与您的条款不一致的访问。如果需要,这实际上只是一个法律支持,但不能防止有目的的滥用。
您可以在 API 中内置一些异常使用模式检测功能(例如有人试图从您的站点收集所有数据),而这些检测通常不会被您的常规客户端应用程序尝试。然后,这可能导致一个帐户被标记,人们可能会进一步调查并决定是通知还是禁止该帐户。许多服务(如 Google 服务)在网站中内置了速率限制,以防止一个特定连接使用超过公平份额的服务器资源。该路径更多的是服务器保护或负载保护策略,而不是防止未经授权的使用功能。
我看到的另一种技术是一种威慑,但我自己并没有实际使用过,它是将一个不断变化的代码嵌入到每个使用你的 API 的合法网站页面中,并要求该代码与所有 API 请求一起发送.这可以防止在没有首先发出网页请求来获取代码的情况下完全独立使用 API。如果代码本身不是直接嵌入到页面中,而是使用一些基于网页中嵌入的其他内容的 Javascript 计算出来的,那么它使服务器进程从网页中抓取代码的工作量更大要求。然后,不断变化的代码具有一定的生命周期,您的服务器可以知道它何时过期。这不是真正的安全性,因为有进取心的开发人员可以通过发出正常的 Web 请求来解决它,获取所需的令牌,然后计算不断变化的代码的当前版本,并定期执行此操作以使他们的代码保持最新。但是,它确实可以发挥足够的作用,从而对尝试使用您的 API 的更随意的黑客起到威慑作用。
而且,如果您看到来自特定来源的重复滥用行为,您还可以阻止您的服务的 IP 范围(也可能会意外阻止某些合法用户)。