GraphQL API-1

簡介

判斷GraphQL方式

判斷一個網站是否使用了GraphQL API,可以通過以下幾種方法:

1. 檢查網絡請求

查看請求端點

  • GraphQL 通常使用單一端點,常見路徑如:
    • /graphql
    • /api/graphql
    • /gql
    • /query

觀察請求特征

  • POST 請求為主(雖然 GET 也可能)
  • 請求體包含 queryvariablesoperationName 字段
  • Content-Type 通常是 application/json

2. 分析請求/響應結構

請求體特征

{"query": "{ user { id name email } }","variables": {},"operationName": "GetUser"
}

響應結構

{"data": {"user": {"id": "123","name": "John","email": "john@example.com"}},"errors": []
}

在這里插入圖片描述

4. 使用瀏覽器開發者工具

打開 F12 開發者工具
切換到 Network 標簽
執行網站操作,觀察 XHR/Fetch 請求
查找包含 GraphQL 特征的請求
在這里插入圖片描述

內省查詢

  • 發送內省查詢測試:
{__schema {types {name}}
}

通過綜合使用這些方法,你通常能夠準確判斷一個網站是否使用了 GraphQL API。最直接的方法是通過瀏覽器開發者工具觀察網絡請求的模式和內容。

Schema

  1. GraphQL Schema 是 GraphQL 中定義數據模型和 API 結構的核心概念,它相當于數據的藍圖或契約,明確規定了客戶端可以執行的操作以及可訪問的數據類型。

  2. Schema 的本質作用是描述整個 API 的數據結構和操作能力,就像數據庫的架構圖一樣,讓客戶端知道可以查詢什么數據、如何查詢,以及數據之間的關系。

  3. Schema 包含三種核心操作類型:query(查詢操作,用于讀取數據)、mutation(變更操作,用于修改數據)和 subscription(訂閱操作,用于實時數據監聽)。

type Book {
id: ID!
title: String!
author: String!
year: Int
}
  1. 完整 Schema 的構成需要將業務數據類型(如 Book)與操作類型結合。Query 類型是必需的,定義了所有可執行的查詢操作;Mutation 類型是可選的,當需要修改數據時才定義;Subscription 類型則根據是否需要實時功能來決定是否定義。

Type

基于您提供的內容,我來整理總結 GraphQL Schema 中的 Type 系統:

GraphQL Type 系統概述

GraphQL Schema 通過 Type(類型) 來實現數據模式的抽象描述。每個 Type 由多個 Field(字段) 組成,而每個字段又指向特定的 Type,形成了完整的類型關系網。

Type 的分類

GraphQL 中的 Type 主要分為六類:ScalarObjectInterfaceUnionEnumInput,其中最重要的是前兩種。

  1. Scalar Type(標量類型)

標量類型是 GraphQL 的基礎數據類型,包括:

  • String:字符串類型
  • Int:整數類型
  • Float:浮點數類型
  • Boolean:布爾類型
  • ID:唯一標識符類型
  • Enum:枚舉類型

非空標識:字段后添加 ! 符號表示該字段不能為空(必需字段)。例如 ID!String! 表示必需的 ID 和字符串字段。

除了內置標量類型,還可以根據需要聲明自定義標量類型。

  1. Object Type(對象類型)
    對象類型用于表達復雜的數據結構,由多個字段組成。例如:
type Book {id: ID!title: String!author: String!year: Int
}

這里 Book 就是一個對象類型,包含 4 個字段,每個字段都指向相應的類型。
3. 字段類型的靈活性

字段的類型不僅可以是標量類型,還可以是其他對象類型,這樣可以建立對象之間的關聯關系:

type User {id: IDname: String
}type Book {id: ID!title: String!author: User  # 這里使用了對象類型 User
}

通過這種方式,可以構建出層次化、關聯性的復雜數據模型,實現數據之間的引用和組合關系。

Operations

GraphQL 規范中主要包括三種操作類型,分別是:Query(查詢,用于從服務器查詢數據)、Mutation(變更,用于操作服務器上數據,包括:添加、修改、刪除等)、Subscription(訂閱),這三者也被稱為root operation type,名為根操作類型。
雖然定義了Book類型,但是這個類型不能直接被訪問和操作,需要通過規范中的 Query、Mutation、Subscription 三個根操作類型來實現,且這三個根操作類型需要顯式的被定義,無法直接使用。

Introspection

Introspection(內省)是 GraphQL 的內置功能,是用于查詢服務端已定義好的 Schema 有關的信息,且在內省系統中還內置了很多元數據類型,包括:__schema、__type、__typeKind、__field、__inputValue、__enumValue、__directive。
由于在真實環境中是無法知道目標 GraphQL Schema 所支持的查詢類型和字段名,但可以通過內省查詢來獲取這些信息(類似于 Swagger API 說明文檔)。除此之外,內省查詢還會泄漏一些敏感信息,所以在真實環境中,記得禁用內省查詢。
也可以直接通過 BurpSuite 內置的功能來進行內省查詢。
在這里插入圖片描述
在這里插入圖片描述
如果目標禁用內省查詢,可以通過工具 Clairvoyance 來進行自動化收集 API 信息。

Vulnerability

1.端點探測

通用端點名稱
GraphQL 服務通常使用類似的端點后綴。測試 GraphQL 端點時,您應該嘗試將通用查詢發送到以下位置:
/graphql
/api
/api/graphql
/graphql/api
/graphql/graphql
在找到 GraphQL 端點后,可以通過簡單的測試來探測目標是否使用 GraphQL 服務,請求類型為application/json,如果沒有正確的回顯,可以嘗試不同的請求的方式以及不同的請求類型。

{“query”: “{}”}
{“query”: “{__schema}”}
{“query”: “{__typename}”}
{“query”: “{__schema{types{name}}}”}
{“query”: “{__schema{queryType{name}}}”}
{“query”: “{__schema{types{name,fields{name}}}}”}

或者直接使用burpsuite自帶得GraphQL或者插件InQL
在這里插入圖片描述

2. Info Gathering

由于在真實環境中是無法知道目標 GraphQL Schema 所支持的查詢類型和字段名,但可以通過內省查詢來獲取這些信息(類似于 Swagger API 說明文檔)。除此之外,內省查詢還會泄漏一些敏感信息,所以在真實環境中,記得禁用內省查詢。
在這里插入圖片描述
內省查詢的結果往往很長而難以處理,可以使用 graphql-voyager 來可視化 Schema 實體之間的關聯。可通過在線網站來實現,地址:https://graphql-kit.com/graphql-voyager/。將內省查詢的結果復制到箭頭處即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912029.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

推薦C++題目練習網站

LeetCode LeetCode是一個全球知名的編程練習平臺,提供大量C題目,涵蓋數據結構、算法、系統設計等。題目難度從簡單到困難,適合不同水平的學習者。平臺支持在線編寫代碼并即時運行測試,提供詳細的題目討論區和官方解答。 Codeforc…

Spring Cloud 微服務(服務注冊與發現原理深度解析)

📌 摘要 在微服務架構中,服務注冊與發現是整個系統運行的基礎核心模塊。它決定了服務如何被定位、調用和管理。 本文將深入講解 Spring Cloud 中 Eureka 的服務注冊與發現機制,從底層原理到源碼分析,再到實際開發中的最佳實踐&a…

【Linux 設備模型框架 kobject 和 kset】

Linux 設備模型框架 kobject 和 kset 一、Linux 設備模型概述二、kobject 與 kset 的核心概念1. kobject2. kset3. 關鍵數據結構 三、kobject 與 kset 的實現源碼四、源碼解析與使用說明1. kset 的創建與初始化2. kobject 的創建與屬性3. sysfs 屬性操作4. 用戶空間訪問示例 五…

一起學前端之HTML------(1)HTML 介紹

HTML 介紹 HTML 即超文本標記語言(HyperText Markup Language),它是構成網頁的基礎技術之一。HTML 借助各種標簽(Tag)對網頁的結構與內容加以描述。下面為你介紹其核心要點: 關鍵特性 標簽結構&#xff…

整體遷移法遷移 Docker 鏡像

docker添加了新的鏡像數據盤,數據盤遷移步驟 使用整體遷移法遷移 Docker 鏡像后,可以在確認遷移成功且新數據盤正常使用后,刪除舊數據目錄來釋放空間1。 # 停止 Docker 服務 sudo systemctl stop docker # 停止 socket 監聽器 sudo systemct…

智能IDE+高效數據采集,讓數據獲取接近0門檻

亮數據也有了自己的官方賬號,大家可以關注:https://brightdata.blog.csdn.net/ 現在正有福利,有興趣的伙伴可以訪問鏈接: https://www.bright.cn/products/web-scraper/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_jhx…

GNSS位移監測站在大壩安全中的用處

一、實時監測大壩變形 整體位移監測 GNSS(全球導航衛星系統)位移監測站能夠實時、連續地獲取大壩在三維空間中的位置信息,包括水平位移和垂直位移。大壩在長期運行過程中,受到水壓力、溫度變化、地基沉降等多種因素的影響&#x…

數字圖像處理(一):從LED冬奧會、奧運會及春晚等等大屏,到手機小屏,快來挖一挖里面都有什么

數字圖像處理(一) 一、什么是圖像:圖像就是多維數組圖像的存儲每一個格子有自己的顏色、深淺如何訪問圖像:1.對于RGB圖像,共有R/G/B三個通道,通過代碼來看。圖像有單通道和多通道之分,訪問時只需…

關于漢語和英語哪個更先進、歷史更久的爭論

引言:熱議背后的思考? ? 在全球化浪潮的推動下,英語作為國際通用語言,在世界范圍內廣泛傳播,其在國際商務、科技交流、學術研究等領域占據著重要地位。而漢語,作為世界上使用人口最多的語言之一,承載著…

在不聯網的情況下,從可以聯網的計算機上拷貝過來的程序報錯:nu1301 無法加載源,https://api.nuget.org/v3/index.json

解決方法: 在聯網的計算機上,找到nuget文件,拷貝到,不能聯網的計算機的相應位置 設置加載這個nuget包,把nuget.org取消。 注意如果出現好多包都不能加載,可能是框架版本的問題,修改框架版本&am…

TCP 狀態流程及原理詳解:從連接建立到性能優化

一、TCP 協議概述與核心價值 TCP(Transmission Control Protocol,傳輸控制協議)是互聯網協議棧中的核心協議之一,為網絡通信提供可靠的、面向連接的數據傳輸服務。在當今復雜多變的網絡環境中,深入理解 TCP 協議的狀態…

【STM32 學習筆記】PWR電源控制

在電子設備中,待機(Standby)和睡眠(Sleep)是兩種不同的省電模式。 1. 待機模式(Standby Mode):在待機模式下,設備仍然保持一定程度的活動,但大部分功能處于暫…

TCP 重傳機制詳解:原理、變體與故障排查應用

一、TCP 重傳機制基礎原理 1.1 可靠傳輸的核心保障 TCP(Transmission Control Protocol,傳輸控制協議)作為互聯網中最常用的傳輸層協議,其核心特性之一是提供可靠的數據傳輸服務。在不可靠的網絡環境中,數據包可能會…

Linux-HTTP服務和APACHE-學習筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 Internet Internet與中國 Internet最早來源于美國國防部高級研究計劃局ARPA建立的ARPANet,1969年投入運行。1983年,ARPAnet分裂為兩部分:ARPAnet和純軍事用的MILNET。當年1月&…

GitHub 趨勢日報 (2025年06月26日)

📊 由 TrendForge 系統生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日獲星趨勢圖 今日獲星趨勢圖 716 free-for-dev 677 Self-Hosting-Guide 618 Best-websites-a-programmer-shoul…

利用TACCO將單細胞注釋transfer至空間組

目錄 環境導入 關鍵函數定義 運行前設定 數據準備 正式運行與保存 可視化與概率調整 偶然發現的一個好用的transfer方法,計算效率相當高,解了我的燃眉之急hh 原方法來自由以色列耶路撒冷希伯來大學的Mor Nitzan、美國麻省理工學院-哈佛大學博德研…

在反向代理環境下精準獲取客戶端真實 IP 的最佳實踐

目錄 1 背景 2 常見誤區 3 X-Forwarded-For 解析規則 4 real_ip() 函數 —— 一行代碼落地 5 與框架方法的協同 6 Nginx 端最小配置 7 生產落地 checklist 8 常見 Q&A 9 總結 在反向代理環境下精準獲取客戶端真實 IP 的最佳實踐 — 基于自定義 real_ip() 函數的完…

華為云Flexus+DeepSeek征文|基于Dify構建抓取金融新聞并發送郵箱工作流

華為云FlexusDeepSeek征文|基于Dify構建抓取金融新聞并發送郵箱工作流 一、構建抓取金融新聞并發送郵箱工作流前言二、構建抓取金融新聞并發送郵箱工作流環境2.1 基于FlexusX實例的Dify平臺2.2 基于MaaS的模型API商用服務 三、構建抓取金融新聞并發送郵箱工作流實戰…

疲勞檢測與行為分析:工廠智能化實踐

視覺分析算法賦能工廠疲勞與安全管理 一、背景與需求 在制造業中,疲勞作業是導致安全事故和效率下降的核心因素之一。傳統人工巡檢存在覆蓋面不足、響應滯后等問題,而基于視覺分析的智能監控系統通過多算法協同,可實現全天候、高精度的疲勞…

醫院信息化建設的要點

隨著醫療技術的不斷發展和患者需求的日益多樣化,醫院信息化建設已經成為提高醫療質量和效率的必要手段。醫院信息化建設是指通過信息技術手段對醫院日常運營、管理和服務進行數字化、智能化和網絡化的改造,以提高醫療服務水平和管理效率。在實施醫院信息…