确保API与发起调用的网站位于同一域/服务器上



如果您的API和对该API进行ajax调用的网站在同一服务器(甚至域)上,您将如何保护该API?

我只希望来自同一服务器的请求被允许!没有来自任何其他域的远程请求,我已经安装了SSL,这是否意味着我是安全的?

我认为你有一些困惑,我想帮助你澄清。

通过您正在谈论"进行Ajax调用"的事实,您正在谈论您的应用程序向服务器发出远程请求。即使你的网站来自同一个域名,你也在发出远程请求。

我只希望来自同一服务器的请求被允许!

这就是问题所在。您不是在谈论从服务器到服务器的请求。您正在讨论从客户机到服务器(Ajax)发出请求,因此您不能使用IP限制(除非您知道将访问您站点的每个客户机的IP地址)。

限制Ajax请求与限制其他请求没有什么不同。如何防止未经授权的用户访问"正常"网页?通常你会让用户进行身份验证,在服务器上创建用户会话,将会话cookie传回给客户端然后每个请求都提交会话cookie ?所有这些东西也适用于Ajax请求。

如果你的API暴露在互联网上,你无法阻止其他人试图对它发出请求(再次,除非你知道所有允许的客户端的ip)。因此,您必须有服务器端控制来授权来自允许的客户机的远程调用。

哦,使用TLS是朝着正确方向迈出的一步。我总是惊讶于许多开发人员认为他们可以不使用TLS。但是仅仅使用TLS是不够的。

查看HTTP标头中的request_referer。告诉你请求来自哪里

这取决于你想要保护它。

第三方让他们的访问者使用访问者在您的站点上的凭据从您的API请求数据

浏览器会自动保护你,除非你采取措施禁用该保护。

第三方让他们的访问者使用您的API和访问者的凭据请求更改您的网站

这不是Ajax特有的。实现针对CSRF的常规防御。

第三方使用自己的客户端请求数据

同样,这与Ajax无关。你不能阻止别人提出要求。您需要认证/授权(例如密码保护)。

我已经安装了SSL,这是否意味着我是安全的

。这样可以防止数据在传输途中被截获。它不会阻止其他人请求数据,或者从端点访问数据。

你可以检查ip地址,如果你想只接受来自同一服务器的请求,在api目录或virtualhost配置指令中放置。htaccess,只允许127.0.0.1或localhost。

最新更新