当请求提供 SQL 时防止 SQL 注入

Prevent SQL injection when SQL is supplied from the request

我工作的公司使用 REST API 进行数据库访问。所以基本上,您只需提供一个 SQL 语句字符串和 REST API returns 一个数据表。现在我不确定如何防止 SQL 注入,因为我无法使用参数生成 SQL 命令(我通常会这样做),因为我必须提供 SQL 语句字符串休息 API.

确保此安全的唯一方法是将 白名单 预先审查的 SQL 查询的特定列表。 REST API 会将输入与白名单进行比较。如果 SQL 查询是白名单中的已知查询之一,那么它可以 运行。否则,API returns 错误状态(我会使用 400 BAD REQUEST)。

但我想 API 的目的是 运行 any SQL 声明客户端输入,逐字记录。这实际上是一个 SQL 设计的注入漏洞。没有办法使那个不SQL注入。

除此之外,API 确实违反了 RESTful 网络服务的惯例。

  • 请求的 URI 未标识资源。
  • 我假设每个请求都是一个 POST 并且 SQL 查询作为负载。您可能不使用 PUT、PATCH 或 DELETE 等 http 方法。
  • 响应消息只是一个数据表,不是自我描述的;它不包含客户端可以用来操作资源的元数据。
  • SQL,作为一种生成语法,允许无限多种查询。这不符合 HATEOAS 原则,即 REST 服务器应该能够根据请求描述有效的操作。客户端必须隐含了解您的数据库架构。

您没有 REST API。您有一个没有特定界面的 Web 服务。

"query anything" API 的存在应该是一个巨大的危险信号。这可能表明该项目在其他方面没有很好地指定。