Categories
程式開發

如何保護你的GraphQL API免受惡意查詢?


使用GraphQL,你可以隨時精確查詢任何你想要的內容。對於API來說,這是令人驚奇的,但是也有復雜的安全隱患。惡意人員可能提交一個開銷大的嵌套的查詢,而不是請求合法的有用數據,來使你的服務器、數據庫、網絡或所有這些設施過載。沒有正確的保護措施,你就會面臨拒絕服務(Denial of Service,DoS)攻擊的風險。

例如,在我們光譜的GraphQL API中,我們有一個如下關係:

type Thread {
  messages(first: Int, after: String): [Message]
}

type Message {
  thread: Thread
}

type Query {
  thread(id: ID!): Thread
}

如你所見,你既可以查詢一個線程的消息列表,也能查詢一個消息的線程。這種循環關係讓惡意人員可以構建一個如下的開銷大的嵌套循環:

query maliciousQuery {
  thread(id: "some-id") {
    messages(first: 99999) {
      thread {
        messages(first: 99999) {
          thread {
            messages(first: 99999) {
              thread {
                # ...repeat times 10000...
              }
            }
          }
        }
      }
    }
  }
}

原文鏈接:【https://www.infoq.cn/article/6bE0YJMK6iofaRV47iVL】。未經作者許可,禁止轉載。