一个苗条的 Restful API 的安全问题


Security concerns of a slim restful api

我正在遵循这个苗条的教程:

https://www.shift8web.ca/blog/2015/04/use-php-to-set-up-a-restful-api-with-simple-authentication/

我只想从 java 应用程序的数据库中获取数据。本教程中提出的方法是否存在任何明显的安全问题?如果是这样,您将如何阻止SQL注入和DDos攻击?

身份验证

该教程中的身份验证方法基本上没有任何问题,许多系统的工作方式就这么简单。

但是,如果您的应用程序在许多不同的 Java 客户端上运行,我会为每个设备单独生成一个访问令牌。

如果你想要一个完美的实现,请遵循OAuth2。但在大多数情况下,这将是矫枉过正。(如果我错了,请纠正我。

SQL 注入

在本教程的示例中,没有为 SQL 查询字符串提供参数,因此没有 SQL 注入。

如果事情变得越来越复杂,我绝对不建议使用那个可疑的lib/mysql.php类。

如果您不想实现库来处理您的数据库,请使用普通 PDO。

在那里,您可以使用预准备语句来防止 SQL 注入:

$statement = $connection->prepare("select * from `users` where age = :age");
$statement->bindParam(':age', '42');

如果你是懒惰的类型,你也可以使用查询构建器(如Hydrahon或Pixie),它将处理准备好的语句本身。

$q->select('users')->where('age', 42)

DDos 攻击

如果您真的害怕DDos攻击,有很多解决方案。

如果你有非常繁重的查询,你可以用PHP本身实现一个简单的速率限制器。

您还可以使用像Cloudflare这样的服务,它会自动阻止攻击。

例如,如果您依赖内部解决方案,请购买支持速率限制的防火墙或使用清漆代理。