【问题标题】:Using GraphQL, Is SQL injection possible via an attribute with a datatype of Int?使用 GraphQL,是否可以通过数据类型为 Int 的属性进行 SQL 注入?
【发布时间】:2020-03-24 02:54:21
【问题描述】:

如果我有输入类型:

input EntityInput {
  id: Int!
  vals: [Int!]!
}

我有一个突变,它是通过在 JavaScript 中从输入数组构建一个 SQL 字符串来实现的

type Mutation {
  updateEntity(input: [EntityInput!]!): [Entity!]!
}

考虑到输入是数字,是否可以进行 SQL 注入?我知道对于String 类型的属性,SQL 注入是可能的。

【问题讨论】:

  • 为什么投反对票?

标签: graphql sql-injection


【解决方案1】:

来自spec

当期望作为输入类型时,只接受整数输入值。所有其他输入值,包括具有数字内容的字符串,都必须引发查询错误,指示类型不正确。如果整数输入值表示小于 -2³¹ 或大于或等于 2³¹ 的值,则应引发查询错误。

换句话说,任何提供的非整数值都将在验证期间引发错误,在触及任何解析器代码之前。根本不会执行无效查询,因此不可能进行注入攻击。

但是,您不应依赖 GraphQL 的类型系统来防止注入。相反,您应该确保正确转义您执行的任何 SQL 查询中使用的所有用户输入。大多数流行的 ORM、查询构建器等已经为您执行此操作,或者至少提供了一种运行安全、参数化查询的方法。否则,您应该使用更流行、经过充分测试的库来执行此操作。

【讨论】:

  • 一个整数值表示低于 - 231 或高于/等于 231 的数字是什么意思?
  • @ZachSmith 哎呀。复制粘贴时格式丢失。那些应该是指数。对此感到抱歉。
  • 谢谢 - 我认为这可能意味着可以以某种方式将非类型化数据传递给 GraphQL API,然后强制执行。不确定这是否有意义
猜你喜欢
  • 1970-01-01
  • 2012-02-03
  • 2018-06-09
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多