问题描述
有关GraphQL及其对sql注入的漏洞的问题。假设我正在执行一些动态搜索,即用户在字段中输入文本,并将其用作graphQL搜索的参数。
所以,我最终得到这样的东西:
{
data {
location: user_input
}
}
其中user_input是用户指定的变量。
现在,假设用户要在此处尝试输入一些恶意代码,以擦除数据库或类似内容(例如1 = 1攻击)。这项工作在这里吗? GraphQL是否仅将查询转换为sql,因此这可能很危险吗?还是GraphQL阻止此类事情发生?
谢谢
解决方法
GraphQL是一种查询语言。来自spec:
GraphQL是一种查询语言,旨在通过提供直观而灵活的语法和系统来描述其数据需求和交互来构建客户端应用程序... GraphQL不是一种能够进行任意计算的编程语言,而是一种用于查询具有此规范中定义的功能的应用程序服务器。 GraphQL并没有为实现它的应用服务器强制使用特定的编程语言或存储系统。
GraphQL与基础数据层无关。它可以与SQL数据库一起使用,但也可以与NoSQL数据库,内存中键值存储,文件系统等一起使用。
特定的GraphQL服务是否容易受到SQL注入的攻击最终取决于该服务的实现方式。它是GraphQL服务这一事实并没有真正纳入其中。