# विशेष HTTP हेडर {{#include ../../banners/hacktricks-training.md}} ## वर्डलिस्ट और उपकरण - [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers) - [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble) ## स्थान बदलने के लिए हेडर **IP स्रोत** को फिर से लिखें: - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` - `X-Forwarded: 127.0.0.1` - `Forwarded-For: 127.0.0.1` - `X-Forwarded-Host: 127.0.0.1` - `X-Remote-IP: 127.0.0.1` - `X-Remote-Addr: 127.0.0.1` - `X-ProxyUser-Ip: 127.0.0.1` - `X-Original-URL: 127.0.0.1` - `Client-IP: 127.0.0.1` - `X-Client-IP: 127.0.0.1` - `X-Host: 127.0.0.1` - `True-Client-IP: 127.0.0.1` - `Cluster-Client-IP: 127.0.0.1` - `Via: 1.0 fred, 1.1 127.0.0.1` - `Connection: close, X-Forwarded-For` (हॉप-बाय-हॉप हेडर की जांच करें) **स्थान** को फिर से लिखें: - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` ## हॉप-बाय-हॉप हेडर एक हॉप-बाय-हॉप हेडर एक हेडर है जिसे वर्तमान में अनुरोध को संभालने वाले प्रॉक्सी द्वारा संसाधित और उपभोग करने के लिए डिज़ाइन किया गया है, न कि एक एंड-टू-एंड हेडर। - `Connection: close, X-Forwarded-For` {{#ref}} ../../pentesting-web/abusing-hop-by-hop-headers.md {{#endref}} ## HTTP अनुरोध स्मगलिंग - `Content-Length: 30` - `Transfer-Encoding: chunked` {{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}} ## कैश हेडर **सर्वर कैश हेडर**: - **`X-Cache`** में प्रतिक्रिया में मान हो सकता है **`miss`** जब अनुरोध कैश नहीं किया गया था और मान **`hit`** जब इसे कैश किया गया है - हेडर **`Cf-Cache-Status`** में समान व्यवहार - **`Cache-Control`** यह संकेत करता है कि क्या एक संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800` - **`Vary`** अक्सर प्रतिक्रिया में **अतिरिक्त हेडर** को **कैश कुंजी का हिस्सा** के रूप में इंगित करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों। - **`Age`** उन सेकंड में समय को परिभाषित करता है जब वस्तु प्रॉक्सी कैश में रही है। - **`Server-Timing: cdn-cache; desc=HIT`** यह भी संकेत करता है कि एक संसाधन कैश किया गया था {{#ref}} ../../pentesting-web/cache-deception/ {{#endref}} **स्थानीय कैश हेडर**: - `Clear-Site-Data`: हेडर यह इंगित करने के लिए कि कैश को हटाया जाना चाहिए: `Clear-Site-Data: "cache", "cookies"` - `Expires`: उस दिन/समय को शामिल करता है जब प्रतिक्रिया समाप्त होनी चाहिए: `Expires: Wed, 21 Oct 2015 07:28:00 GMT` - `Pragma: no-cache` `Cache-Control: no-cache` के समान - `Warning`: **`Warning`** सामान्य HTTP हेडर संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक `Warning` हेडर दिखाई दे सकते हैं। `Warning: 110 anderson/1.3.37 "Response is stale"` ## शर्तें - इन हेडरों का उपयोग करने वाले अनुरोध: **`If-Modified-Since`** और **`If-Unmodified-Since`** केवल तब डेटा के साथ उत्तर दिया जाएगा जब प्रतिक्रिया हेडर\*\*`Last-Modified`\*\* में एक अलग समय हो। - **`If-Match`** और **`If-None-Match`** का उपयोग करने वाले शर्तीय अनुरोध एक Etag मान का उपयोग करते हैं ताकि वेब सर्वर प्रतिक्रिया की सामग्री भेजे यदि डेटा (Etag) बदल गया है। `Etag` HTTP प्रतिक्रिया से लिया जाता है। - **Etag** मान आमतौर पर प्रतिक्रिया की **सामग्री** के आधार पर **गणना की जाती है**। उदाहरण के लिए, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` इंगित करता है कि `Etag` **37 बाइट्स** का **Sha1** है। ## रेंज अनुरोध - **`Accept-Ranges`**: संकेत करता है कि क्या सर्वर रेंज अनुरोधों का समर्थन करता है, और यदि हां, तो रेंज को किस इकाई में व्यक्त किया जा सकता है। `Accept-Ranges: ` - **`Range`**: संकेत करता है कि सर्वर को दस्तावेज़ का कौन सा भाग लौटाना चाहिए। - **`If-Range`**: एक शर्तीय रेंज अनुरोध बनाता है जो केवल तब पूरा होता है जब दिया गया etag या तिथि दूरस्थ संसाधन से मेल खाता है। असंगत संसाधन के संस्करणों से दो रेंज डाउनलोड करने से रोकने के लिए उपयोग किया जाता है। - **`Content-Range`**: यह इंगित करता है कि एक पूर्ण संदेश में आंशिक संदेश कहाँ संबंधित है। ## संदेश शरीर की जानकारी - **`Content-Length`:** संसाधन का आकार, दशमलव संख्या में बाइट्स। - **`Content-Type`**: संसाधन के मीडिया प्रकार को इंगित करता है - **`Content-Encoding`**: संकुचन एल्गोरिदम को निर्दिष्ट करने के लिए उपयोग किया जाता है। - **`Content-Language`**: दर्शकों के लिए लक्षित मानव भाषा(ओं) का वर्णन करता है, ताकि यह उपयोगकर्ता को उनके अपने पसंदीदा भाषा के अनुसार भेद करने की अनुमति देता है। - **`Content-Location`**: लौटाए गए डेटा के लिए एक वैकल्पिक स्थान को इंगित करता है। पेंटेस्ट के दृष्टिकोण से यह जानकारी आमतौर पर "व्यर्थ" होती है, लेकिन यदि संसाधन **401** या **403** द्वारा **संरक्षित** है और आप इस **जानकारी** को **प्राप्त करने** का कोई **तरीका** ढूंढ सकते हैं, तो यह **दिलचस्प** हो सकता है।\ उदाहरण के लिए, एक HEAD अनुरोध में **`Range`** और **`Etag`** का संयोजन पृष्ठ की सामग्री को HEAD अनुरोधों के माध्यम से लीक कर सकता है: - `Range: bytes=20-20` हेडर के साथ एक अनुरोध और एक प्रतिक्रिया जिसमें `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` शामिल है, यह लीक कर रहा है कि बाइट 20 का SHA1 है `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` ## सर्वर जानकारी - `Server: Apache/2.4.1 (Unix)` - `X-Powered-By: PHP/5.3.3` ## नियंत्रण - **`Allow`**: यह हेडर यह संप्रेषित करने के लिए उपयोग किया जाता है कि एक संसाधन कौन से HTTP विधियों को संभाल सकता है। उदाहरण के लिए, इसे इस प्रकार निर्दिष्ट किया जा सकता है `Allow: GET, POST, HEAD`, यह इंगित करता है कि संसाधन इन विधियों का समर्थन करता है। - **`Expect`**: क्लाइंट द्वारा उपयोग किया जाता है ताकि यह संप्रेषित किया जा सके कि सर्वर को अनुरोध को सफलतापूर्वक संसाधित करने के लिए किन अपेक्षाओं को पूरा करना चाहिए। एक सामान्य उपयोग मामला `Expect: 100-continue` हेडर से संबंधित है, जो संकेत करता है कि क्लाइंट एक बड़ा डेटा पेलोड भेजने का इरादा रखता है। क्लाइंट ट्रांसमिशन के साथ आगे बढ़ने से पहले `100 (Continue)` प्रतिक्रिया की तलाश करता है। यह तंत्र नेटवर्क उपयोग को अनुकूलित करने में मदद करता है क्योंकि यह सर्वर की पुष्टि की प्रतीक्षा करता है। ## डाउनलोड - HTTP प्रतिक्रियाओं में **`Content-Disposition`** हेडर यह निर्देशित करता है कि क्या एक फ़ाइल को **inline** (वेबपृष्ठ के भीतर) प्रदर्शित किया जाना चाहिए या एक **संलग्नक** (डाउनलोड किया गया) के रूप में माना जाना चाहिए। उदाहरण के लिए: ``` Content-Disposition: attachment; filename="filename.jpg" ``` यह मतलब है कि "filename.jpg" नामक फ़ाइल को डाउनलोड और सहेजने के लिए बनाया गया है। ## सुरक्षा हेडर ### सामग्री सुरक्षा नीति (CSP) {{#ref}} ../../pentesting-web/content-security-policy-csp-bypass/ {{#endref}} ### **विश्वसनीय प्रकार** CSP के माध्यम से विश्वसनीय प्रकारों को लागू करके, अनुप्रयोगों को DOM XSS हमलों से सुरक्षित रखा जा सकता है। विश्वसनीय प्रकार यह सुनिश्चित करते हैं कि केवल विशेष रूप से तैयार किए गए ऑब्जेक्ट्स, जो स्थापित सुरक्षा नीतियों के अनुरूप हैं, खतरनाक वेब API कॉल में उपयोग किए जा सकें, इस प्रकार डिफ़ॉल्ट रूप से JavaScript कोड को सुरक्षित रखते हैं। ```javascript // Feature detection if (window.trustedTypes && trustedTypes.createPolicy) { // Name and create a policy const policy = trustedTypes.createPolicy('escapePolicy', { createHTML: str => str.replace(/\/g, '>'); }); } ``` ```javascript // Assignment of raw strings is blocked, ensuring safety. el.innerHTML = "some string" // Throws an exception. const escaped = policy.createHTML("") el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** यह हेडर MIME प्रकार की स्निफ़िंग को रोकता है, एक प्रथा जो XSS कमजोरियों का कारण बन सकती है। यह सुनिश्चित करता है कि ब्राउज़र सर्वर द्वारा निर्दिष्ट MIME प्रकारों का सम्मान करें। ``` X-Content-Type-Options: nosniff ``` ### **X-Frame-Options** क्लिकजैकिंग से लड़ने के लिए, यह हेडर यह सीमित करता है कि दस्तावेज़ों को ``, `