Мы используем Graph-QL Java для нашего сервера GraphQL.
наш вариант использования заключается в проверке дополнительного параметра запроса и выдаче ошибки
Запрос мутации:
mutation{actionHandler(action:"status",entity:"integration",ids:[1],value:"Run"){result}} OR 1=1
Класс схемы:
public class ActionHandler {
private String entity;
private String action;
private String value;
private List<Integer> ids;
private List<String> result;
}
Выше запроса с дополнительным параметром запроса ИЛИ 1 = 1. они не являются частью определенной схемы. обратите внимание, что это было дано для проверки атаки уязвимости с использованием логического условия.
запрос выше дает те же результаты, что и фактический запрос схемы
Ожидаемый / фактический запрос схемы:
Мутация {actionHandler (действие: "Статус", сущность: "интеграция", иды: [1], значение: "Run") {результат}}
вводит дополнительное логическое условие (OR 1 = 1), поскольку параметр не манипулирует результатами запроса. похоже, это было проигнорировано, когда собственный анализатор графа ql преобразовал запрос мутации в соответствующий объект схемы.
как мы можем проверить дополнительный входной параметр, используя саму собственную библиотеку GraphQL, которая не является частью запроса схемы?