函式庫 / SDK
mtrudel/bandit avatar
mtrudel/bandit

Bandit 的 Python 靜態安全掃描邊界

Bandit 是一個用於 Plug & WebSock 應用程式的純 Elixir HTTP 伺服器。

1,922 個 Star119 個 ForkElixirMIT
GitHub

秒懂

它是什麼?
Bandit 是一個純 Elixir HTTP 伺服器,支援 HTTP/1.x、HTTP/2 和 WebSocket,適用於 Plug 和 WebSock 應用,支援 HTTP 和 HTTPS。
適合誰用?
適合需要Bandit 是一個純 Elixir HTTP 伺服器,支援 HTTP/1.x、HTTP/2 和 WebSocket,適用於 Plug 和 WebSock 應用,支援 HTTP 和 HTTPS。的讀者,不適合只期待完整產品保證的人。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 8 天前。
用什麼語言寫的?
主要是 Elixir(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

用於 Plug 和 WebSock 的 Elixir HTTP 伺服器

Bandit 是一個用於 Plug 和 WebSock 應用的 HTTP 伺服器,完全用 Elixir 編寫,並建構在 Thousand Island 網路庫之上。它透過 HTTP 和 HTTPS 提供 HTTP/1.x、HTTP/2 和 WebSocket 用戶端支援。專案將正確性、清晰度和效能列為基本目標,旨在透過保持實現的可理解性來揭開底層基礎設施程式碼的神秘面紗。根據 README,Bandit 自 Phoenix 1.7.11 起成為 Phoenix 的預設 HTTP 伺服器。

協定支援與一致性測試

README 聲明完全支援 RFC 9112 和 RFC 9110 定義的 HTTP/1.x,以及 RFC 9113 和 RFC 9110 定義的 HTTP/2。其 HTTP/2 實現在嚴格模式下 h2spec 測試套件中得分 100%,WebSocket 實現在 Autobahn 測試套件中得分 100%,兩者都在專案的 CI 中執行。WebSocket 支援遵循 RFC 6455,並包含 RFC 7692 定義的訊息壓縮。Bandit 還支援在 HTTP/1.x 和 HTTP/2 上使用 gzip 和 deflate 進行內容編碼壓縮,如 RFC 9110 所述。更廣泛的測試套件涵蓋單元測試、credo、dialyzer 和效能回歸測試。

README 中的效能結果

README 連結到正在進行的自動化效能測試,這些測試將 Bandit 與 Cowboy 進行比較。對於 HTTP/1.x,根據並發請求數量,Bandit 的速度最高可達到 Cowboy 的 4 倍;對於 HTTP/2,最高可達 1.5 倍。README 將此歸因於 Bandit 從底層開始為 Plug 應用而設計。它還聲稱具有可擴充套件的用戶端處理能力,記憶體使用與 Cowboy 相當或更好。文件沒有提供基準測試方法或原始資料,而是指向工作流以取得這些細節。

與 Phoenix 和 Plug 整合

對於 Phoenix,README 指導在 mix.exs 中新增 {:bandit, "~> 1.8"},並在端點設定中新增 adapter: Bandit.PhoenixAdapter。對於 Plug 應用,可以在監督樹中使用 {Bandit, plug: MyPlug} 啟動 Bandit,或呼叫 Bandit.start_link(plug: MyPlug)。README 指出,任何 Phoenix 或 Plug 應用都應能作為 Cowboy 的直接替代品工作,但錯誤應報告。Phoenix 中的 WebSocket 支援需要 Phoenix 1.7 或更高版本。

伺服器設定與 HTTPS

Bandit 的設定選項由 t:Bandit.options/0 型別定義,README 連結到該型別以取得完整清單。對於 HTTPS,README 提供了一個範例,設定 scheme: :https、certfile 和 keyfile 的絕對路徑。它指出證書和金鑰設定是常見的障礙,但範例是唯一給出的設定細節。README 沒有解釋如何產生證書或處理其他 TLS 設定。

WebSocket 支援與程序訊息警告

對於 Phoenix 應用,WebSocket 支援無需額外設定即可工作。在較低層次上,Bandit 完全支援 WebSock 和 WebSockAdapter 庫。README 包含一個具體警告:由於 Bandit 在內部大量使用訊息傳遞,尤其是在 HTTP/2 請求中,Plug 程式碼絕不能接收與 {:bandit, _} 或 {:plug_conn, :sent} 匹配的訊息。Plug 中的任何 receive 呼叫都應進行保護,以將這些訊息留在信箱中供 Bandit 處理。

實現結構、目標與授權

Bandit 由三個協定特定實現組成:HTTP/1、HTTP/2 和 WebSockets,每個都有各自的 README。HTTP/1 實現被建議作為理解程式碼庫的最佳起點。專案目標包括全面的 RFC 支援、最小內部策略,以及正確性、清晰度和效能的優先順序。Bandit 以 MIT 授權發布,版權歸 Mat Trudel 所有,2020 年。README 歡迎貢獻,要求在進行重大工作前先開 issue 討論,並指示貢獻者遵循行為準則和安全政策。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。 這個判讀不能只看功能清單。實際使用時,應把專案文件中的入口、輸入、輸出與錯誤訊息放在同一個測試記錄中,逐項對照 README 的描述。對本專案而言,測試結果還要回到它自己的檔案結構與命令列參數:確認檔案真的被讀取,確認輸出能被下游工具使用,也確認失敗時留下足夠的診斷資訊。若結果只在理想範例成立,卻無法處理你的資料格式,就不應把 README 的能力描述當成部署承諾。

編輯結論

適合需要Bandit 是一個純 Elixir HTTP 伺服器,支援 HTTP/1.x、HTTP/2 和 WebSocket,適用於 Plug 和 WebSock 應用,支援 HTTP 和 HTTPS。的讀者,不適合只期待完整產品保證的人。採用前應先用專案文件中的實際入口驗證核心流程:驗證時應以 Bandit README 的命令列選項掃描一個含 Python 安全問題的測試目錄,檢查報告中的測試編號、嚴重度與輸出格式,再決定如何接入 CI。

官方來源

  1. Official README
  2. Project repository
社群筆記

社群筆記