對于一個小的 git helper 腳本,基于這篇博文,我希望能夠“發現”給定的遠程 URL ( [email protected]:namespace/project.git) 指向哪個 Git 托管應用程式(例如 GitLab CE/EE、Gitea、GHE 等)。
使用curl --head我發現從“一些識別字串”到“無”的范圍很廣。因此,如果輸入啟發式方法,這似乎是不準確的。通過頁面正文可能會為啟發式提供更多資料,但看起來同樣粗糙。
是否有更優雅或更標準化的方式來查找應用程式型別?像“server_agent”這樣的東西?
我了解出于安全原因,可能不會提供應用程式版本等詳細資訊。另外,我注意到在 Shodan 中,這些應用程式沒有“產品”搜索。這是否意味著在沒有 HTML 決議的情況下根本不可能可靠地識別它們?
uj5u.com熱心網友回復:
我認為沒有任何“標準化”方法來查找托管應用程式。Git 協議本身不提供任何這樣的東西。在 HTTP(大多數 Git 托管應用程式將其用作傳輸協議)中,Server標頭可能是最佳匹配 - 但當然,正如您所指出的,它不需要有意義(甚至存在)。
這是否意味著在沒有 HTML 決議的情況下根本不可能可靠地識別它們?
是的,如果服務器選擇不通過Server標頭進行識別,您只能猜測(基于其他標頭、HTML 回應等)。
所以似乎沒有可靠的方法來做你想做的事。也許將其視為XY 問題會有所幫助?如果你描述了你想用這些資訊做什么,你可能會找到一個不同的解決方案。
也許您可以嘗試探測服務器?還是問用戶?
uj5u.com熱心網友回復:
這是否意味著在沒有 HTML 決議的情況下根本不可能可靠地識別它們?
或多或少,這是真的。正如 sleske 正確指出的那樣,沒有可靠的方法來使用標頭來識別 HTTP 服務器背后的應用程式/技術,因為服務器通常選擇不提供此資訊。
決議 tld 主頁上的 HTML 回應可能會也可能不會產生任何有用的資訊。熟悉這些服務后,您可能會得到一個很好的猜測——但就是這樣。一個推測。有了足夠的成熟度,您可能會非常擅長猜測,但沒有什么是 100% 確定的。
您還可以根據遠程 URL 和/或應用程式行為(如果可公開訪問)做出一些積極的決定——(探測服務器,正如 sleske 還建議的那樣)
例如,除了GitLab之外的大多數 SCM 服務器都沒有深度嵌套的遠程 URL。遠程 URL[email protected]/foo/bar/project.git在 GitHub、BitBucket 或 Gitea 上是不可能的,但在 GitLab 上是可能的。
您可能還會發現某些 SCM 產品版本或回應中的其他獨特元素專門使用某些 UI 工具包(存在相關 javascript、CSS 等的某些組合)。錯誤回應(通過 HTTP 和 SSH)也可以揭示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419723.html
標籤:
下一篇:將左聯接添加到Linq查詢時出錯
