如何防止网站外部的 API 调用

How to prevent API calls outside a web site

本文关键字:API 调用 外部 何防止 网站      更新时间:2023-09-26

我有一个具有以下功能的网站:用户来到www.mysite.com/page.php。该页面上的 Javascript 对www.mysite.com/api.php进行 ajax API 调用,并在同一页面上显示结果www.mysite.com/page.php

我害怕有人开始在自己的软件上使用我的 api.php因为使用www.mysite.com/api.php会花费我一点钱。因此,我希望只有访问过该页面www.mysite.com/page.php的用户才能从www.mysite.com/api.php中获得有效的结果。用户将无法登录我的网站。

正确的方法是什么?我想我可以在用户访问页面时启动会话.php然后以某种方式首先检查 api.php是否存在具有有效会话 ID 的会话?

如果您只是希望用户在使用 api.php 之前访问页面.php那么会话是要走的路。

通常,如果您想要"软"保护,您可以使用 POST 谓词从您的网站获取结果。 然后,如果用户在浏览器中访问 URL 并只键入 api.php调用,他们将不会得到结果。 这并不能保护您的网站,但它可以使搜索引擎远离该网址并意外浏览到该网址。

否则,有很多用于 php 的身份验证插件。

http://www.homeandlearn.co.uk/php/php14p1.html 例如。

您可以通过多种方式检查请求,例如令牌验证,会话验证,甚至可以通过服务器"HTTP_REFERER"变量<</p>

div class="answers">

如果引荐来源网址在域外阻止它,请使用 $_SERVER['HTTP_REFERER'] 检查引荐来源网址。

请注意,人们可以更改他们的推荐人,因此它不安全。

另一个更好的解决方案可能是像谷歌这样的验证码 https://www.google.com/recaptcha/intro/index.html

您在

隐藏输入字段中发送的Cookie,HTTP-Referer,其他POST-Data或某些表单数据不够安全,无法确定用户来自您的网站。

用户可以通过修改 http-headerdata(或者如果您使用 cookie,则通过更改客户端计算机上的 cookie 文件)轻松更改所有内容。

我更喜欢 PHP 会话与针对机器人(例如蜜罐)的良好保护相结合,因为如果您正确使用它们,劫持它们并不容易。

请注意:如果有专门针对您网站的机器人,无论如何您都会输。所以没有100%的保护。