
एक खुला परीक्षण प्लेटफ़ॉर्म जो HTTP/1.1 सर्वरों को RFC 9110/9112 आवश्यकताओं, स्मगलिंग वैक्टर और विकृत इनपुट प्रबंधन के विरुद्ध जाँचता है। अपना फ्रेमवर्क जोड़ें, स्वचालित रूप से अनुपालन परिणाम प्राप्त करें।
Http11Probe HTTP/1.1 सर्वरों के लिए एक अनुपालन और सुरक्षा परीक्षक है। यह कच्चे TCP सॉकेट पर एक सर्वर पर विकृत, अस्पष्ट और अत्यधिक आकार के अनुरोध भेजता है और जाँचता है कि सर्वर RFC 9110 और RFC 9112 द्वारा वास्तव में क्या आवश्यक है, उसके विरुद्ध कैसे प्रतिक्रिया करता है। ये वे अजीब मामले हैं जैसे बेयर LF लाइन एंडिंग, अप्रचलित लाइन फोल्डिंग, CL/TE अनुरोध तस्करी, चंक-फ़्रेमिंग ट्रिक्स, अत्यधिक बड़े हेडर और NUL बाइट्स, जहाँ एक सख्त पार्सर और एक ढीला पार्सर असहमत होने लगते हैं।
वही 215 परीक्षण 12 भाषाओं में लिखे गए 41 संदर्भ सर्वरों के विरुद्ध चलते हैं, Nginx, Apache और Envoy से लेकर Kestrel, Gin, Actix और Node, Bun और Deno में निर्मित सर्वर तक। प्रत्येक परिणाम को विनिर्देश में MUST/SHOULD/MAY शब्दों के विरुद्ध स्कोर किया जाता है और Pass, Fail या Warn के रूप में चिह्नित किया जाता है। Warn का अर्थ है कि RFC सख्त और ढीले दोनों व्यवहारों की अनुमति देता है, इसलिए कोई भी गलत नहीं है।
आपको http-probe.com पर पूर्ण दस्तावेज़, RFC उद्धरणों के साथ प्रति-परीक्षण शब्दकोष और प्रत्येक सर्वर के लिए लाइव परिणाम मैट्रिक्स मिलेगा।
प्रोब लक्ष्य-अज्ञेयवादी है। यह किसी भी HTTP/1.1 सर्वर का परीक्षण करता है जो पहले से --host:--port पर सुन रहा है, और फ्रेमवर्क चुनने के लिए कोई फ़्लैग नहीं है। पहले सर्वर प्रारंभ करें (या probe-local.sh को आपके लिए एक चालू करने दें), फिर प्रोब को उस पर इंगित करें।
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
| फ़्लैग | विवरण | डिफ़ॉल्ट |
|---|---|---|
--host | लक्ष्य होस्टनाम या IP पता | localhost |
--port | लक्ष्य पोर्ट नंबर | 8080 |
--category | केवल इस श्रेणी में परीक्षण चलाएं (Compliance, Smuggling, MalformedInput, Normalization, Cookies, Capabilities) | सभी |
--test | केवल विशिष्ट परीक्षण ID चलाएं, केस-असंवेदनशील (दोहराने योग्य) | सभी |
--timeout | प्रति परीक्षण कनेक्ट और रीड टाइमआउट सेकंड में | 5 |
--output | JSON परिणाम फ़ाइल में लिखें | कोई नहीं |
--verbose, -v | प्रत्येक परीक्षण के लिए कच्चा सर्वर प्रतिक्रिया प्रिंट करें | बंद |
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080 --output results.json
विशिष्ट परीक्षण चलाएं:
dotnet run --project src/Http11Probe.Cli -- --test SMUG-CL-TE-BOTH --test SMUG-DUPLICATE-CL
प्रत्येक परीक्षण पूरा होने पर परिणाम कंसोल पर स्ट्रीम होते हैं, अंत में एक सारांश के साथ:
Score: 97/97 19 warnings (146 tests, 35.5s)
प्रोब केवल अनुरोध भेजता है, सर्वर प्रारंभ नहीं करता। src/Servers/ के अंतर्गत बंडल सर्वरों में से किसी एक को प्रोब करने के लिए, scripts/probe-local.sh का उपयोग करें। यह वही काम करता है जो CI पाइपलाइन करती है: सर्वर की Docker छवि बनाएं, इसे --network host पर चलाएं, इसके आने की प्रतीक्षा करें, इसे प्रोब करें, फिर इसे हटा दें।
# src/Servers/ के अंतर्गत अपने निर्देशिका नाम से एक सर्वर प्रोब करें, जैसे ActixServer
scripts/probe-local.sh --server ActixServer
# प्रत्येक बंडल सर्वर प्रोब करें
scripts/probe-local.sh --all
--server मान निर्देशिका नाम (ActixServer) है, प्रदर्शन नाम (Actix) नहीं। यदि आपके Docker डेमॉन को रूट की आवश्यकता है, तो --docker-sudo जोड़ें ताकि आपको पूरी स्क्रिप्ट sudo के साथ न चलानी पड़े:
scripts/probe-local.sh --server ActixServer --docker-sudo
| फ़्लैग | विवरण |
|---|---|
--server <Dir> | src/Servers/ के अंतर्गत अपने निर्देशिका नाम से एक एकल सर्वर प्रोब करें (जैसे NginxServer) |
--all | src/Servers/*/probe.json के अंतर्गत प्रत्येक सर्वर प्रोब करें |
--port <Port> | लक्ष्य पोर्ट (डिफ़ॉल्ट: 8080) |
--skip-build | dotnet build छोड़ें (मान लें कि Release बिल्ड पहले से मौजूद है) |
--verbose | CLI को --verbose पास करें |
--docker-sudo | Docker कमांड sudo के माध्यम से चलाएं (आपको स्क्रिप्ट बिना sudo के चलाने देता है) |
-h, --help | सहायता दिखाएं |
यह probe-<ServerDir>.json (प्रति सर्वर एक) लिखता है, साथ ही स्थानीय रेंडरिंग के लिए probe-data.js और docs/static/probe/data.js भी लिखता है। आपको jq, docker, curl, python3 और .NET 10 SDK की आवश्यकता होगी।
probe-local.sh केवल एक सुविधा रैपर है। यदि आप इसे हाथ से करना चाहते हैं, मान लीजिए कई प्रोब रनों में एक सर्वर को चालू रखने के लिए, तो कंटेनर स्वयं बनाएं और चलाएं, फिर प्रोब को उस पर इंगित करें। इसे रेपो रूट से चलाएं, क्योंकि यह Docker बिल्ड संदर्भ है:
docker build -t probe-actix -f src/Servers/ActixServer/Dockerfile .
docker run -d --name probe-target --network host probe-actix
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
docker rm -f probe-target
आप प्रोब को किसी भी HTTP/1.1 सर्वर पर भी इंगित कर सकते हैं जो आप पहले से चला रहे हैं:
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 9000
.NET 10 SDK आवश्यक है।
dotnet build Http11Probe.slnx
प्रोब वर्कफ़्लो पुल अनुरोधों और workflow_dispatch पर चलता है। यह प्रत्येक सर्वर की Docker छवि बनाता है, इसे प्रोब करता है, और PR टिप्पणी के रूप में एक तुलना तालिका पोस्ट करता है।