Skip to content

Options to secure API #1478

Closed
Closed

Description

@lee-pai-long

Is your feature request related to a problem? Please describe.
I used graphql-cop to test my graphql API built using Graphene Django and the result is as follows:

[HIGH] Alias Overloading - Alias Overloading with 100+ aliases is allowed (Denial of Service - /graphql)
[HIGH] Directive Overloading - Multiple duplicated directives allowed in a query (Denial of Service - /graphql)
[HIGH] Field Duplication - Queries are allowed with 500 of the same repeated field (Denial of Service - /graphql)
[LOW] Field Suggestions - Field Suggestions are Enabled (Information Leakage - /graphql)
[MEDIUM] GET Method Query Support - GraphQL queries allowed using the GET method (Possible Cross Site Request Forgery (CSRF) - /graphql)
[HIGH] Introspection - Introspection Query Enabled (Information Leakage - /graphql)
[HIGH] Introspection-based Circular Query - Circular-query using Introspection (Denial of Service - /graphql)
[MEDIUM] POST based url-encoded query (possible CSRF) - GraphQL accepts non-JSON queries over POST (Possible Cross Site Request Forgery - /graphql)

I would like to have options for example to disable or limit use of aliases to prevent Alias Overloading but I can't find options to mitigate this or the other attacks.

Describe the solution you'd like
Is it possible to provide options to mitigate those attacks in a futur version of graphene-django ?

Describe alternatives you've considered
...

Additional context
...

Activity

  1. kiendang commented on Nov 21, 2023

    @kiendang
    Contributor

    Is this something that could be solved with a custom ValidationRule? You might want to take a look at #1475.

  2. lee-pai-long commented on Nov 22, 2023

    @lee-pai-long
    Author

    Hi @kiendang the instrospection can be solve with that yes, but not the rest.

  3. kiendang commented on Nov 22, 2023

    @kiendang
    Contributor

    I think a few of these, Alias Overloading, Directive Overloading and Field Duplication could be solved by writing a custom ValidationRule that analyses the query.

    The CSRF issues could be solved by configuring Django if I'm not wrong.

  4. lee-pai-long commented on Nov 22, 2023

    @lee-pai-long
    Author

    @kiendang but how to limit the number of aliases, directives and field in a custom validation rule ?

  5. kiendang commented on Nov 22, 2023

    @kiendang
    Contributor

    I guess you could traverse the AST and count the number of occurrences? See Implementing a custom ValudationRule and the Visitor class.

    Anw I'm converting this to a discussion which I think is more appropriate.

  6. locked and limited conversation to collaborators on Nov 22, 2023
  7. converted this issue into a discussion #1479 on Nov 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions