如果我有输入类型:
input EntityInput {
id: Int!
vals: [Int!]!
}
而且我有一个通过在输入数组中的JavaScript中构建SQL字符串来实现的变异
type Mutation {
updateEntity(input: [EntityInput!]!): [Entity!]!
}
考虑到输入是数字,是否可以进行SQL注入?我知道,对于String
类型的属性,可以进行SQL注入。
从spec:
当期望作为输入类型时,仅接受整数输入值。所有其他输入值,包括具有数字内容的字符串,都必须引发查询错误,指示类型错误。如果整数输入值表示小于-2 3-1或大于或等于2 3-1的值,则应该引发查询错误。
换句话说,所提供的任何非整数值都将在验证过程中(在触摸您的任何解析器代码之前)引发错误。无效查询将根本不会执行,因此不可能进行注入攻击。
但是,您不应依赖GraphQL的类型系统来防止注入。相反,您应该确保正确地转义了所执行的任何SQL查询中使用的所有用户输入。大多数流行的ORM,查询构建器等已经为您完成了此操作,或者至少提供了一种运行安全的,参数化查询的方法。否则,您应该使用一个更流行且经过测试的库。