【技术分享】API安全架构之抽丝剥茧
来源: websec.io
作者:阿诺斯基
有一件事需要注意 - 当我使用内置的PHP服务器作为我的示例中的Web服务时,它不应该被用来替代更强大的网络服务器,如Apache或Nginx。它非常适合测试和本地开发环境,但在性能质量部门肯定会希望你选择更可靠性能更好的Web服务器。如果你在生产环境中使用了内置的PHP Web服务器,那么可能会给你带来麻烦。
让我们使用内置的服务器来获取一个简单的脚本并进行运行,以便你可以看到这个脚本的工作原理。你可以在系统的任何位置创建我们的测试文件,只要目录中有index.php这个文件就行。如果你要进行动手尝试,通常我建议你创建一个临时目录。在本教程中,我将在基于Unix的系统上执行命令,但在Windows上这个过程也是类似的。
创建文件只是一些比较简单的命令:
mkdir www-tmp echo '<?php phpinfo(); ?>' test.php现在让我们启动内置的PHP服务器:
> php -S test.php php -S localhost:8000 test.php PHP 7.0.12 Development Server started at Wed Apr 19 16:40:00 2017 Listening on :8000 Document root is /path/to/script Press Ctrl-C to quit.如果Composer的安装过程一切顺利的话,它应该会生成自动加载的文件,并创建一个composer.lock文件,其中包含了有关于你安装的Slim版本的详细信息。如果有错误,你需要在继续操作之前对其进行调试 - 你必须先安装Slim及其依赖项,然后再尝试开发以下代码。
创建我们的第一个路由
随着Slim的组件的全部安装完成,但由于Composer为我们设置了自动加载(PSR-0或PSR-4),我们可以直接在我们的脚本中使用它。Slim创建路由的过程非常简单,在我们的一个文件中定义路由 - 不需要创建任何目录或额外的文件。然而,这既具有有优点又有缺点。能够将东西全部保存在一个地方是很方便的做法,但是当整个项目开始变得复杂时,单个文件就使得维护更加困难。
不过,我们先从一些简单的代码开始,所以让我们创建第一个路由。首先创建一个index.php文件并将下面的代码放在其中:
现在,我们已经创建了一个基本的应用程序,我们可以继续改变一些关于它如何工作以满足我们的API需求。
使用配置
Slim框架的一个主要功能是使用依赖注入容器定义配置值和你在应用程序中使用的其他资源。这还包括一些特殊的设置,Slim在内部重写了默认的错误处理程序。它也可以作为我们的控制器的存储库,使其更容易直接在我们的路由中使用它们。
我们先从这些自定义的设置开始,这样做有助于更好的构建我们的Slim API。这些配置是针对Slim的处理程序的,但实现这些处理程序的思路是一样的,可以在任何框架内重新实现(有些甚至可以为你自动执行)。
notFoundHandler
当在定义的路由的列表中找不到被调用的URL时,Slim就会使用这个处理程序。有了这个错误处理程序,当客户端用户调用不正确时,我们可以设置一个友好的API响应。这里有一个例子:
如果你不习惯使用PSR-7结构,那么代码可能会有点复杂,但是当你将其拆下来后会发现它其实很简单。本质上,如果调用不存在的URL,我们将返回一个HTTP状态为404 的对象response和一个值为“资源无效” 的JSON消息error:
然后Slim在端点未定义时内部使用此处理程序 – 你无需做其他任何工作。
notAllowedHandler
Slim使用的另一个特殊设置就是notAllowedHandler。当不允许调用端点的方法时,框架会使用此处理程序,比如使用GET请求去调用一个POST端点:
它与上面的notFoundHandler非常相似,只是在响应中有不同的内容:401和“不允许的方法”的错误消息。
errorHandler