使用GraphQL,是否可以通过数据类型为Int的属性进行SQL注入?

问题描述 投票:-2回答:1

如果我有输入类型:

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

而且我有一个通过在输入数组中的JavaScript中构建SQL字符串来实现的变异

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

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

graphql sql-injection
1个回答
1
投票

spec

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.