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

使用GraphQL,是否可以通过数据类型为Int的属性进行SQL注入?,graphql,sql-injection,Graphql,Sql Injection,如果我有输入类型: input EntityInput { id: Int! vals: [Int!]! } 我有一个变种,它是通过从输入数组用JavaScript构建SQL字符串实现的 type Mutation { updateEntity(input: [EntityInput!]!): [Entity!]! } 考虑到输入是数字,SQL注入可能吗?我知道,对于String类型的属性,SQL注入是可能的。来自: 当预期为输入类型时,只接受整数输入值。所有其他输入值(包括包含

如果我有输入类型:

input EntityInput {
  id: Int!
  vals: [Int!]!
}
我有一个变种,它是通过从输入数组用JavaScript构建SQL字符串实现的

type Mutation {
  updateEntity(input: [EntityInput!]!): [Entity!]!
}
考虑到输入是数字,SQL注入可能吗?我知道,对于
String
类型的属性,SQL注入是可能的。

来自:

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

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


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

为什么要进行向下投票?表示低于-231或高于/等于231的数字的整数值意味着什么?@ZachSmith Oops。复制和粘贴时丢失了格式。这些人本应该是倡导者。对此很抱歉。谢谢-我想这可能意味着可以通过某种方式将非类型化数据传递给GraphQLAPI,然后强制执行。不确定这是否有意义