Güvenlik: Sorguda Kullanılan Kimlik Bilgilerini İfşa Etmekten Kaçınma
GraphQL API'miz herkese açık olmadığı sürece (örneğin statik bir site oluştururken), GraphQL sorgusunun özel verileri ifşa etmemesine dikkat etmeliyiz:
- Sorgunun yanıtında
- Bir hata oluştuğunda çıktıda
- Günlüklerde
Örneğin, Environment Fields modülü tarafından sağlanan _env alanını kullanan şu sorgu:
{
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}...kimlik bilgilerini doğrudan yanıtta yazdıracaktır:
{
"data": {
"githubAccessToken": "{some access token}"
}
}GraphQL sorgusunu güvenli hale getirmek için eklentideki çeşitli özellikleri kullanabiliriz:
- Field to Input: ortam değerini dinamik bir değişken aracılığıyla başka bir alana enjekte etmek için
- @remove Directive: ortam değişkeninin değerinin çıktıda yazdırılmasını önlemek için
- Send HTTP Request Fields: GraphQL sorgusu içinden doğrudan harici bir servise bağlanmak için
Örneğin, aşağıdaki sorgu özel bir erişim belirteci kullanarak GitHub REST API'sine bağlanır:
{
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
# This directive will remove this entry from the output
@remove
# Create the authorization header to send to GitHub
authorizationHeader: _sprintf(
string: "Bearer %s",
# "Field to Input" feature to access value from the field above
values: [$__githubAccessToken]
)
# Do not print in output
@remove
# Use the field from "Send HTTP Request Fields" to connect to GitHub
gitHubArtifactData: _sendJSONObjectCollectionHTTPRequest(
input: {
url: "https://api.github.com/repos/GatoGraphQL/GatoGraphQL/actions/artifacts",
options: {
headers: [
{
name: "Accept"
value: "application/vnd.github+json"
},
{
name: "Authorization"
# "Field to Input" feature to access value from the field above
value: $__authorizationHeader
},
]
}
}
)
}Bu sorguda, hassas veri içeren githubAccessToken ve authorizationHeader alanlarının her ikisi de çıktıdan kaldırılır; gitHubArtifactData alanı ise girdilerinden hiçbirini sızdırmadan API çağrısının sonuçlarını doğrudan yazdıracaktır (örneğin: bir hata, değişkenin değeri yerine "$__authorizationHeader" dizesini yazdıracaktır).