
熱門好用的AI+換臉系列API推薦
user(id: '12') { # depth 0
posts { # depth 1
title
}
}
}
它獲取用戶所有帖子的標(biāo)題。使用嵌套通過user和posts字段來獲取它們的標(biāo)題。
GraphQL 的設(shè)計允許查詢無限增長。假設(shè)我們有User一個包含帖子列表的類型。
{
user(id: "12") {
posts {
title
}
}
}
該Posts類型還允許像這樣獲取用戶:
{
posts(id: "12") {
user {
name
}
}
}
攻擊者可以利用這種嵌套創(chuàng)建類似的復(fù)雜循環(huán)查詢,如下所示:
query badQuery { # depth 0
user(id: "12") { # depth 1
posts { # depth 2
user { # depth 3
name
posts { # depth 4
user { # depth 5
posts { # depth 6
title
user { # depth 7
# and more..
}
}
}
}
}
}
}
}
正如您所看到的,這個查詢有好幾層,會形成一個大循環(huán)。像這樣的查詢計算成本很高,可能會導(dǎo)致 API 無法響應(yīng)。因此,我們可以應(yīng)用深度限制來保護(hù) API 免受影響。
您可以設(shè)置一個特定的數(shù)字(如 7)來限制 API 的嵌套深度。這樣,如果查詢的嵌套層級超過 7 級,就會被拒絕。想象一下,如果一個惡意查詢有 100 多層嵌套,卻沒有深度限制。這將是毀滅性的,對嗎?這就是應(yīng)用深度限制的原因。
原文鏈接:What is Depth Limiting in APIs?