<p align="center">
  <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.md">English</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
</p>

<p align="center">
  <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/nullout/readme.png" width="400" alt="NullOut">
</p>

<p align="center">
  <a href="https://github.com/mcp-tool-shop-org/nullout/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/nullout/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="https://codecov.io/gh/mcp-tool-shop-org/nullout"><img src="https://codecov.io/gh/mcp-tool-shop-org/nullout/branch/main/graph/badge.svg" alt="Coverage"></a>
  <a href="https://github.com/mcp-tool-shop-org/nullout/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
  <a href="https://mcp-tool-shop-org.github.io/nullout/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
</p>

एक एमसीपी सर्वर जो विंडोज पर उन "हटाने में मुश्किल" फाइलों को ढूंढता है और उन्हें सुरक्षित रूप से हटाता है।

विंडोज, Win32 स्तर पर, कुछ डिवाइस नामों जैसे `CON`, `PRN`, `AUX`, `NUL`, `COM1`-`COM9`, और `LPT1`-`LPT9` को आरक्षित रखता है। इन नामों वाली फाइलें NTFS पर मौजूद हो सकती हैं (जिन्हें WSL, लिनक्स टूल या निम्न-स्तरीय एपीआई के माध्यम से बनाया जा सकता है), लेकिन एक्सप्लोरर या सामान्य शेल कमांड के माध्यम से इन फ़ाइलों का नाम बदलना, स्थानांतरित करना या हटाना असंभव हो जाता है।

NullOut इन खतरनाक प्रविष्टियों की खोज करता है और उन्हें सुरक्षित रूप से हटाता है। यह काम `\\?\` विस्तारित पथ नामस्थान का उपयोग करके किया जाता है, और इसमें एक दो-चरणीय पुष्टि प्रक्रिया शामिल है, जो विशेष रूप से MCP होस्टों के लिए डिज़ाइन की गई है।

## यह कैसे काम करता है।

1. **जांच करें:** अनुमत सूची में शामिल डायरेक्टरी में, उन फ़ाइलों की जांच करें जिनमें आरक्षित नाम का उपयोग किया गया हो, अंत में बिंदु या खाली स्थान हों, या जिनका पथ बहुत लंबा हो।
2. **योजना बनाएं:** सफाई प्रक्रिया की योजना बनाएं - NullOut प्रत्येक फ़ाइल के लिए एक अद्वितीय "पुष्टि टोकन" उत्पन्न करता है, जो फ़ाइल की पहचान (वॉल्यूम सीरियल नंबर + फ़ाइल आईडी) से जुड़ा होता है।
3. **हटाएं:** टोकन का उपयोग करके हटाएं - NullOut फ़ाइल को हटाने से पहले यह दोबारा जांचता है कि फ़ाइल में कोई बदलाव तो नहीं हुआ है (TOCTOU सुरक्षा)। यह विस्तारित नेमस्पेस का उपयोग करके फ़ाइल को हटाता है।

## सुरक्षा मॉडल।

- **केवल अनुमत रूट:** सभी कार्य केवल उन डाइरेक्टरी तक सीमित हैं जिन्हें आपने स्पष्ट रूप से कॉन्फ़िगर किया है।
- **विनाशकारी कार्यों में कोई कच्चा पाथ नहीं:** 'डिलीट' कमांड केवल सर्वर द्वारा जारी किए गए पहचान संख्या (आईडी) और पुष्टि टोकन स्वीकार करता है।
- **'deny_all' रीपार्स नीति:** जंक्शन, सिंबॉलिक लिंक और माउंट पॉइंट कभी भी एक्सेस या डिलीट नहीं किए जाते हैं।
- **फ़ाइल पहचान बंधन:** टोकन एचएमएसी (HMAC) से हस्ताक्षरित होते हैं और वॉल्यूम सीरियल नंबर और फ़ाइल आईडी से जुड़े होते हैं; स्कैन और डिलीट के बीच कोई भी बदलाव अस्वीकार कर दिया जाता है।
- **केवल खाली डाइरेक्टरी:** संस्करण 1 (v1) गैर-खाली डाइरेक्टरी को डिलीट करने से इनकार करता है।
- **संरचित त्रुटियां:** प्रत्येक विफलता एक मशीन-पठनीय कोड के साथ वापस की जाती है, जिसमें अगले चरण के सुझाव भी शामिल होते हैं।

## एमसीपी उपकरण।

| उपकरण। | प्रकार। | उद्देश्य। |
|------|------|---------|
| `list_allowed_roots` | केवल पढ़ने के लिए। | कॉन्फ़िगर किए गए स्कैन रूट (मूल फ़ोल्डर) प्रदर्शित करें। |
| `scan_reserved_names` | केवल पढ़ने के लिए। | किसी रूट में मौजूद खतरनाक प्रविष्टियों को खोजें। |
| `get_finding` | केवल पढ़ने के लिए। | किसी खोज के बारे में पूरी जानकारी प्राप्त करें। |
| `plan_cleanup` | केवल पढ़ने के लिए। | पुष्टि टोकन के साथ हटाने की योजना तैयार करें। |
| `delete_entry` | विनाशकारी। | किसी फ़ाइल या खाली फ़ोल्डर को हटाएं (इसके लिए टोकन की आवश्यकता होती है)। |
| `who_is_using` | केवल पढ़ने के लिए। | उन प्रक्रियाओं की पहचान करें जो किसी फ़ाइल को लॉक कर रही हैं (रीस्टार्ट मैनेजर)। |
| `get_server_info` | केवल पढ़ने के लिए। | सर्वर के मेटाडेटा, नीतियां और क्षमताएं। |

## कॉन्फ़िगरेशन।

अनुमत रूटों को पर्यावरण चर के माध्यम से निर्धारित करें:

```
NULLOUT_ROOTS=C:\Users\me\Downloads;C:\temp\cleanup
```

टोकन पर हस्ताक्षर करने के लिए गुप्त कुंजी (एक यादृच्छिक मान उत्पन्न करें):

```
NULLOUT_TOKEN_SECRET=your-random-secret-here
```

## खतरे का मॉडल।

NullOut निम्नलिखित खतरों से सुरक्षा प्रदान करता है:

- **विनाशकारी दुरुपयोग:** फ़ाइल हटाने के लिए सर्वर द्वारा जारी किया गया एक पुष्टिकरण टोकन आवश्यक है; सीधे फ़ाइल पथ स्वीकार नहीं किए जाते।
- **पथ विचलन:** सभी क्रियाएं केवल स्वीकृत रूट फ़ोल्डरों तक ही सीमित हैं; `..` जैसे पथों को हल किया जाता है और अस्वीकार कर दिया जाता है।
- **रिपार्से पॉइंट से बचना:** जंक्शन, सिंबोलिक लिंक और माउंट पॉइंट कभी भी एक्सेस या हटाए नहीं जाते हैं ("अस्वीकार करें")।
- **समय-आधारित दौड़ (TOCTOU):** टोकन को वॉल्यूम सीरियल नंबर और फ़ाइल आईडी के साथ HMAC से जोड़ा जाता है; स्कैन और हटाने के बीच किसी भी पहचान परिवर्तन को अस्वीकार कर दिया जाता है।
- **नेमस्पेस चालें:** विनाशकारी क्रियाएं `\\?\` एक्सटेंडेड पथ उपसर्ग का उपयोग करती हैं ताकि विंडोज 32 नाम विश्लेषण को बाईपास किया जा सके।
- **लॉक की गई फ़ाइलें:** रीस्टार्ट मैनेजर से जुड़ी जानकारी केवल पढ़ने के लिए होती है; NullOut कभी भी प्रक्रियाओं को समाप्त नहीं करता है।
- **खाली न होने वाले फ़ोल्डर:** नीति के अनुसार अस्वीकृत; केवल खाली फ़ोल्डर ही हटाए जा सकते हैं।

**निम्नलिखित डेटा तक पहुंचा जाता है:** फ़ाइल सिस्टम मेटाडेटा (नाम, फ़ाइल आईडी, वॉल्यूम सीरियल नंबर), प्रक्रिया मेटाडेटा (प्रोसेस आईडी, रीस्टार्ट मैनेजर के माध्यम से एप्लिकेशन नाम)।
**निम्नलिखित डेटा तक नहीं पहुंचा जाता है:** फ़ाइल सामग्री, नेटवर्क, क्रेडेंशियल, विंडोज रजिस्ट्री।
कोई भी डेटा एकत्र या भेजा नहीं जाता है।

## आवश्यकताएं।

- विंडोज 10/11
- पायथन 3.10 या उससे उच्च संस्करण

---

यह उपकरण <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a> द्वारा बनाया गया है।
