リレーションを介してデータが通過するのを防ぐために、どのように関係者間で認証を行っていますか?context.userリゾルバが既に設定されている場合でも、GraphQLリレーションはデータを漏洩します。リレーションシップによるデータエクスポージャーの防止方法
たとえば、ユーザーがいるショップがあります。
// Returns error as i've set custom resolver to allow only context.user.is_shop_owner
{
shops {
name
users {
email
...
}
}
}
このクエリは、通常context.user.is_shop_owner
のようなカスタムリゾルバでブロックされているので、あなたは、ルートクエリからこれを実行することはできません。
ただし、悪意のあるユーザーがリレーションを通過してユーザーオブジェクトに到達した場合、ユーザーは機密ユーザーデータを取得できます。
// Data exposed un-intendedly due to relation traversal. How to prevent this?
{
products {
name
price
shop {
users { ... } // boom, exposed
}
}
}
これはgraphqlの欠陥ですか? あなたはどうやってこれを回避していますか?
これはpython-grapheneスタックbtwにあります。
編集:Btw、私たちはexclude_fields
をやることができると知っていますが、ShopNodeからユーザーにアクセスすることはできません。これはShopNodeを照会する重要な情報ですので、フィールドを限定するのは良い考えではないでしょう。
この場合、Djangoを使用していますか?返品時にあなたの意見を表示できますか? –
@MauricioCortazar私はDjangoビューを使用していません、ごめんなさい! –
スキーマ*私は* –