वेब फ़ॉन्ट्स की मेमोरी सुरक्षा को मज़बूत बनाना
(developer.chrome.com)- Skrifa Rust में लिखी गई एक नई font processing लाइब्रेरी है, जिसे Chrome में फ़ॉन्ट प्रोसेसिंग को अधिक सुरक्षित बनाने के लिए मौजूदा FreeType के विकल्प के रूप में विकसित किया गया है
- Rust की memory safety की वजह से security समस्याएँ कम होती हैं और फ़ॉन्ट टेक्नोलॉजी में सुधार की गति बढ़ती है
- FreeType से Skrifa में बदलाव के साथ code quality बेहतर हुई है और security fixes का समय घटा है
FreeType को बदलने की वजह
-
वेब वातावरण में अलग-अलग स्रोतों से आने वाले अविश्वसनीय resources को सुरक्षित रूप से लाना और उपयोग करना संभव होना चाहिए
-
Chrome वेब फ़ॉन्ट्स को सुरक्षित रूप से उपयोग करने के लिए कई security उपाय पहले से लागू कर रहा था
- सैंडबॉक्सिंग (Sandboxing): क्योंकि code सुरक्षित नहीं है और फ़ॉन्ट्स भरोसेमंद नहीं हैं, इसलिए उन्हें अलग संरक्षित वातावरण में चलाया जाता है
- OpenType Sanitizer: फ़ॉन्ट प्रोसेसिंग से पहले फ़ॉन्ट को साफ़ और जाँचता है
- फ़ज़िंग (Fuzzing): फ़ॉन्ट प्रोसेसिंग से जुड़ी लाइब्रेरीज़ का व्यापक परीक्षण
-
FreeType का उपयोग Android, ChromeOS और Linux में default font processing लाइब्रेरी के रूप में होता है
- अगर security vulnerability पैदा होती है, तो उसके बहुत बड़े संख्या में users को प्रभावित करने का जोखिम है
FreeType में सामने आई प्रमुख security समस्याएँ
- 1. असुरक्षित भाषा का उपयोग
- FreeType C में लिखा गया है, इसलिए memory errors और buffer overflow जैसी security vulnerabilities की संभावना रहती है
- 2. प्रोजेक्ट-विशिष्ट समस्याएँ
- macro उपयोग के कारण explicit size types की कमी
- macros (
FT_READ_*,FT_PEEK_*) explicit size types (int16_tआदि) को छिपा देते हैं
- macros (
- नए code में बार-बार bugs का आना
- COLRv1 और OT-SVG support जोड़ते समय समस्याएँ सामने आईं
- test coverage की कमी
- जटिल test fonts बनाना कठिन होने के कारण पर्याप्त testing नहीं हो पाई
- macro उपयोग के कारण explicit size types की कमी
- 3. dependency समस्याएँ
- FreeType जिन bzip2, libpng, zlib जैसी लाइब्रेरीज़ का उपयोग करता है, उनमें भी बार-बार समस्याएँ सामने आईं
- 4. फ़ज़िंग की सीमाएँ
- फ़ॉन्ट फ़ाइलों की जटिल data structures के कारण कुछ समस्याएँ fuzzing से पकड़ी नहीं जातीं
- फ़ॉन्ट्स में जटिल rules और state machine शामिल होते हैं
- valid structures बनाना कठिन होने से प्रभावी fuzzing करना मुश्किल होता है
- फ़ॉन्ट फ़ाइलों की जटिल data structures के कारण कुछ समस्याएँ fuzzing से पकड़ी नहीं जातीं
Skrifa का परिचय और Chrome में लागू करने की प्रक्रिया
- Chrome में उपयोग होने वाली graphics लाइब्रेरी Skia फ़ॉन्ट metadata और rendering के लिए FreeType का उपयोग करती है
- Chrome ने FreeType को Skrifa से बदलने के लिए Skia का font backend नए सिरे से बनाया
Skrifa अपनाने के चरण
- Chrome 128 (अगस्त 2024):
- color fonts और CFF2 जैसे कम उपयोग होने वाले font formats के लिए Skrifa का trial लागू किया गया
- Chrome 133 (फ़रवरी 2025):
- Linux, Android और ChromeOS में web font processing के लिए Skrifa को पूरी तरह लागू किया गया
- Windows और Mac पर, जब system किसी font format को support नहीं करता, तब इसे fallback processor के रूप में उपयोग किया जाता है
सुरक्षा और performance में सुधार
- 1. memory safety को मज़बूत करना
- Rust डिफ़ॉल्ट रूप से memory safety सुनिश्चित करता है
- हालांकि performance के लिए bytemuck लाइब्रेरी का उपयोग किया गया है
- यह तब उपयोग होती है जब मजबूत type structures के साथ bytes की reinterpretation की ज़रूरत होती है
- Rust के भविष्य के updates में सुरक्षित conversion संभव होने पर इसे उसी सुविधा से बदला जाएगा
- 2. सटीकता में सुधार
- Skrifa data structures की immutability सुनिश्चित करके code readability, maintainability और multithreading performance को बेहतर बनाता है
- लगभग 700 unit tests से code quality की पुष्टि की गई
- fauntlet टूल का उपयोग करके FreeType और Skrifa के outputs की तुलना की गई → image quality के मेल की जाँच की गई
- 3. व्यापक testing और security में सुधार
- Skrifa और integration code पर जून 2024 से fuzzing tests चलाए जा रहे हैं
- अब तक 39 bugs मिले हैं → ये security vulnerabilities नहीं हैं (visual errors या नियंत्रित crashes)
- इससे पुष्टि हुई कि code quality में सुधार हुआ है और समस्याएँ security issue तक नहीं पहुँचतीं
- Skrifa और integration code पर जून 2024 से fuzzing tests चलाए जा रहे हैं
निष्कर्ष और आगे की योजना
- Rust-आधारित Skrifa को अपनाने से security मज़बूत हुई है और code quality में सुधार हुआ है
- development productivity बढ़ी है और users को अधिक सुरक्षित font environment मिलता है
- आगे Linux और ChromeOS के system font processing में भी Skrifa लागू करने की योजना है
2 टिप्पणियां
पिछली बार zlib, इस बार freetype…
पुराने दिग्गजों का एक-एक करके पीछे हटना… कुछ-कुछ इंसानों की दुनिया जैसा ही लगता है।
Hacker News राय
Google में fuzzing से मिली समस्याओं को ठीक करने के लिए कम से कम 0.25 software engineer की ज़रूरत होती है
Rust की असली ताकत safety की ओर क्रमिक बदलाव और मौजूदा projects में integrate हो सकने की उसकी क्षमता है
monitor panel के subpixel layout के अनुसार fonts कैसे render होते हैं, इसके बारे में सीख रहा हूँ
Skia उन्नत text layout करता है और glyphs को cache करने वाली एक उन्नत library है
fonts को OpenType Sanitizer से प्रोसेस किए जाने से पहले उसके माध्यम से गुज़ारा जाता है