使用PHP保护公共API

时间:2016-06-09 13:14:07

标签: javascript php mysql api

我正在创建一个使用PHP / MySQL和Javascript框架的SPA博客网站,但尚未确定哪一个。

我的想法是,我愿意创建一个API并使用Javascript来使用它,但我想保护API,以便没有人可以访问/发布/例如并获得所有帖子的列表。

我不需要任何注册,也没有用户系统。

我该怎么做呢?

由于

3 个答案:

答案 0 :(得分:0)

你可能能够对列入白名单的IP地址进行硬编码,但正如史蒂夫在评论中指出的那样:它既可以公开也可以不公开。

我会使用一些小注册功能来生成可用于访问API的API密钥。

答案 1 :(得分:0)

有人指出公共API是公开的,但是有一些步骤可能会使除UI之外的其他用户更难以访问它。

问题与Cross Site Request Forgery类似(但不一样),您可以使用列出的任何预防技术的变体来减少对API的未经授权的访问。

最简单的实现可能是这样的:

的index.html

<?php 
    $mytoken = uniqid();
    $_SESSION['token'] = $mytoken;
?>
<input type='hidden' name='apitoken' value='<?= $mytoken;?>' >

一些-API-endpoint.php

<?php
    if($_GET['apitoken'] !== $_SESSION['token']) {
        header("HTTP/1.0 403 Forbidden", true, 403);
    }

如果有人想要访问您的公共API,他们就可以,但他们必须至少付出一点努力才能这样做。

答案 2 :(得分:0)

使用JWT服务也同样有效。

看看这里:introduction to JWT

您还可以使用api密钥和密码,它将在您的服务的初始会话身份验证中传递。

这是一个Stackoverflow答案,可以帮助解释您需要做什么:key and secret in php

如果你真的很懒,你可以在客户端使用基本身份验证或摘要身份验证进行身份验证。 (这是不可取的,并且存在安全风险,就好像您没有使用ssl一样,密码在请求中作为纯文本传递)

另一篇文章供您参考:PHP HTTP Authentication