10 पॉइंट द्वारा GN⁺ 2024-11-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Go कोड लिखते समय security को ध्यान में रखना एक जटिल काम है
  • कुछ ठोस best practices बताई गई हैं, जिन्हें लगातार लागू करने पर मज़बूत, सुरक्षित और उच्च-प्रदर्शन वाला कोड लिखा जा सकता है

Go वर्ज़न को अपडेटेड रखना

  • प्रोजेक्ट में उपयोग किए जा रहे Go वर्ज़न को नवीनतम बनाए रखना चाहिए
  • भले ही आप नई language features का उपयोग न करें, Go वर्ज़न अपग्रेड करने से खोजी गई vulnerabilities के लिए सभी security patches मिल सकते हैं
  • नया Go वर्ज़न नवीनतम dependencies के साथ compatibility भी सुनिश्चित करता है
  • Go release history साइट पर देखा जा सकता है कि किस Go release में कौन-से security issues और CVE ठीक किए गए, और प्रोजेक्ट की go.mod फ़ाइल में उसे नवीनतम वर्ज़न पर अपडेट किया जा सकता है
  • Go वर्ज़न अपग्रेड करने के बाद यह जाँच लेनी चाहिए कि compatibility और dependency से जुड़ी समस्याएँ तो नहीं हैं
  • static code analyzers का उपयोग करके code quality और security का आकलन किया जा सकता है

vet

  • Go का अपना go vet कमांड इस्तेमाल करके Go कोड का विश्लेषण किया जा सकता है
  • go vet कमांड को बिना arguments चलाने पर यह डिफ़ॉल्ट रूप से सभी अनुमत options के साथ चलता है
  • यह source code को scan करके संभावित issues रिपोर्ट करता है
  • सबसे आम issues में goroutine से जुड़ी गलतियाँ, unused variables, और unreachable code areas शामिल हैं

staticcheck

  • third-party linter Staticcheck bugs ढूँढता है, performance problems detect करता है, और Go language style भी लागू करता है
  • यह मिले हुए issues की व्याख्या करता है और examples के साथ fixes सुझाता है
  • CI pipeline में चलाने के अलावा, इसे standalone executable के रूप में install करके लोकल में भी code scan किया जा सकता है
  • install किए गए वर्ज़न की जाँच करें और यह सुनिश्चित करें कि scan चलाने की तैयारी हो चुकी है
  • बिना arguments चलाने पर यह डिफ़ॉल्ट रूप से सभी code analyzers को कॉल करता है
  • NGINX Agent GitHub repository में यह क्या खोज सकता है, इसका उदाहरण देखें
  • scan results को तीन श्रेणियों में बाँटा जा सकता है: deprecated package/method/function, unused variable/field, और code quality से जुड़े issues

golangci-lint

  • golangci-lint को go install कमांड से install किया जा सकता है
  • install सही हुआ है या नहीं, यह देखने के लिए वर्ज़न जाँचें
  • बिना arguments कॉल करने पर सभी linters चलाए जाते हैं
  • पहले clone की गई agent repository में यह कौन-सी warnings और suggestions दिखाता है, यह देखें
  • linter सटीक file और line को इंगित करता है
  • कोड का आकलन करें, बदलाव करें, फिर linter को दोबारा चलाएँ और सभी unit tests चलाएँ
  • अगर tests पास हो जाएँ, तो अपडेट किया हुआ कोड commit करें और remote पर push करें

race condition का पता लगाना

  • जब कई goroutines एक ही समय में किसी resource को access करने की कोशिश करते हैं, तब race condition हो सकती है
  • यह तब detect होती है जब कम-से-कम एक goroutine उस resource को modify करने की कोशिश कर रहा हो
  • Go, -race argument के साथ test tool का उपयोग करके ऐसी स्थितियों की जाँच के लिए built-in support देता है
  • race detector केवल उसी कोड का आकलन करता है जो वास्तव में चला हो, और जो code paths execute नहीं हुए उन्हें नज़रअंदाज़ करता है, इसलिए पहले static code analyzer चलाकर यह सुनिश्चित करना चाहिए कि dead code न हो
  • tests को parallel में चलाने से concurrency issues detect होने की संभावना बढ़ जाती है

vulnerabilities के लिए source code scan

govulncheck

  • यह एक tool है जो codebase को CVEs database में सूचीबद्ध ज्ञात vulnerabilities के लिए scan करता है
  • इसे Go team ने विकसित किया है, और Go vulnerabilities के लिए समर्पित database scanner को जानकारी देता है
  • नवीनतम वर्ज़न install करने के बाद इसकी बुनियादी functionality आज़माएँ
  • habit repository clone करने के बाद root directory में tool चलाएँ
  • कोई vulnerability नहीं मिलती
  • binary files को scan करने पर अलग vulnerabilities मिल सकती हैं
  • Go वर्ज़न को नवीनतम पर अपग्रेड करें, dependencies लाएँ, फिर जाँचें कि software और dependencies में कोई CVE न हो

gosec

  • यह एक static code analyzer है जो unsafe code configurations खोजने में मदद करता है
  • इसे लोकल सिस्टम पर या GitHub Action के रूप में CI pipeline में चलाया जा सकता है
  • scan configuration के लिए कई तरह के options और rules उपलब्ध हैं
  • scan करने के लिए Go कोड वाली GitHub repository clone करें और root directory में scan शुरू करें
  • scan report में severity और confidence के अनुसार sorted संभावित समस्याओं की सूची देखी जा सकती है
  • report किए गए CWE को जाँचें और सूचीबद्ध कमजोरियों के बारे में विस्तार से जानें

fuzzing

  • code quality जाँचने और vulnerabilities खोजने का एक अंतिम तरीका
  • यह एक automated विशेष testing है, जो code test coverage का उपयोग करके randomly generated input data को manipulate करती है
  • buffer overflow, SQL injection, DoS attacks, XSS attacks जैसी संभावित security flaws खोजने में यह बहुत उपयोगी है
  • क्योंकि बहुत-से input combinations अपने-आप generate होते हैं, इसलिए developers को सैकड़ों या हज़ारों input data combinations के बारे में खुद सोचने की ज़रूरत नहीं पड़ती

1 टिप्पणियां

 
GN⁺ 2024-11-05
Hacker News राय
  • govulncheck एक ऐसा टूल है जो यह जांचता है कि vulnerable code वास्तव में reachable है या नहीं, इसलिए यह प्रोग्राम की dependencies की जांच करने से अधिक उपयोगी है
  • Google के capslock प्रोजेक्ट को भूलें नहीं; उसे भी संदर्भ के तौर पर देखना चाहिए
  • इसमें go vet और go test -race के बारे में उपयोगी टिप्स शामिल हैं
  • Go memory-safe नहीं है, लेकिन दूसरी भाषाओं की तुलना में इसमें सुरक्षित तरीके से कोड लिखना आसान है
    • Go के स्पष्ट syntax की वजह से functions के behavior और data structures को आसानी से समझा जा सकता है
    • AI tools के Go के साथ अच्छी तरह काम करने का कारण यह है कि function के अंदर का context स्पष्ट होता है
  • Semgrep static analysis के जरिए भाषा और सामान्य frameworks के लिए checks करने वाला एक शानदार टूल है
    • Semgrep के open rules GitHub पर देखे जा सकते हैं
  • Go की security reputation पर सवाल उठाया गया है
    • आम तौर पर Go को सुरक्षित और स्थिर माना जाता है, और यह .NET जैसे दूसरे tools के समान स्तर पर है
  • gosec के बारे में नई जानकारी मिली
  • 9 साल तक Go apps maintain करते हुए Go versions और modules को आसानी से upgrade किया जा सका
    • GitHub अपने-आप vulnerabilities की सूचना देता है, और 99% मामलों में सब कुछ बिना बदलाव के काम करता है
  • Go वास्तव में memory-safe नहीं है
    • atomicity केवल word-size values के लिए guaranteed है, और interface pointers या slice जैसे double-word values concurrency में memory safety को नुकसान पहुँचा सकते हैं
  • Go अच्छा है, लेकिन हाल के समय में generics का उपयोग बढ़ने से code readability घट रही है
    • पहले के लगभग बिना generics वाले Go code की तुलना में इसे पढ़ना कठिन हो गया है