如何防止网站外的API调用

时间:2014-12-05 17:04:36

标签: javascript php ajax api

我有一个具有以下功能的网站:用户来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获得有效结果。用户无法以任何方式登录我的网站。

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

5 个答案:

答案 0 :(得分:0)

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

请注意,人们可以改变他们的REFERER,因此不安全。

另一个更好的解决方案可能是来自Google https://www.google.com/recaptcha/intro/index.html

的CAPTCHA

答案 1 :(得分:0)

如果您只是希望用户在使用api.php之前访问page.php,则会话即可。

答案 2 :(得分:0)

通常情况下,如果您需要“软”保护,请使用POST动词从您的网站获取结果。然后,如果用户在他们的浏览器中访问URL并只输入api.php调用,他们将无法获得结果。这不能保护您的网站,但它会使搜索引擎远离该网址,并且可以很好地浏览它。

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

例如

http://www.homeandlearn.co.uk/php/php14p1.html

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

我更喜欢PHP-Session结合对机器人(例如蜜罐)的良好保护,因为如果你正确使用它们,你就不会那么容易。

请注意:如果您的网站特别存在机器人,则无论如何都会丢失。所以没有100%的保护。