
Go सुरक्षा जाँचकर्ता
Go AST और SSA कोड प्रतिनिधित्व को स्कैन करके स्रोत कोड में सुरक्षा समस्याओं की जाँच करता है।
Apache लाइसेंस, संस्करण 2.0 ("लाइसेंस") के तहत लाइसेंस प्राप्त। आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति यहाँ प्राप्त कर सकते हैं।
आप gosec को GitHub एक्शन के रूप में निम्नानुसार चला सकते हैं:
@master के साथ संस्करणित टैग का उपयोग करें जो नवीनतम स्थिर रिलीज़ पर पिन किया गया है। यह स्थिर व्यवहार प्रदान करेगा।```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...
#### निजी मॉड्यूल वाले प्रोजेक्ट्स की स्कैनिंग
यदि आपका प्रोजेक्ट निजी Go मॉड्यूल आयात करता है, तो आपको प्रमाणीकरण कॉन्फ़िगर करना होगा ताकि `gosec` निर्भरताओं को प्राप्त कर सके। अपने वर्कफ़्लो में निम्नलिखित पर्यावरण चर सेट करें:
- `GOPRIVATE`: मॉड्यूल पथ उपसर्गों की अल्पविराम से अलग की गई सूची जिन्हें निजी माना जाना चाहिए
(जैसे, `github.com/your-org/*`)।
- `GITHUB_AUTHENTICATION_TOKEN`: आपके निजी रिपॉजिटरी तक पढ़ने की पहुंच वाला एक GitHub टोकन।```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPRIVATE: github.com/your-org/*
GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
args: ./...
आप तीसरे पक्ष के कोड विश्लेषण उपकरणों को एकीकृत कर सकते हैं GitHub कोड स्कैनिंग के साथ SARIF फ़ाइलों के रूप में डेटा अपलोड करके।
वर्कफ़्लो GitHub एक्शन वर्कफ़्लो में एक चरण के रूप में gosec चलाने का एक उदाहरण दिखाता है जो results.sarif
फ़ाइल आउटपुट करता है। वर्कफ़्लो फिर upload-sarif एक्शन का उपयोग करके results.sarif फ़ाइल को
GitHub पर अपलोड करता है।```yaml
name: "Security Scan"
on: push: schedule:
jobs: tests: runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v3 - name: Run Gosec Security Scanner uses: securego/gosec@v2 with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v2 with: # Path to SARIF file relative to the root of the repository sarif_file: results.sarif
### Go Analysis
`goanalysis` पैकेज एक
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
प्रदान करता है जो मानक Go analysis इंटरफ़ेस का समर्थन करने वाले उपकरणों के साथ एकीकरण के लिए है, जैसे कि Bazel के
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
फ्रेमवर्क:```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec को Go 1.25 या नए संस्करण की आवश्यकता है।```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## त्वरित शुरुआत```bash
# Scan all packages in current module
gosec ./...
# Write JSON report
gosec -fmt json -out results.json ./...
# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...
0: स्कैन बिना दबाए गए निष्कर्षों/त्रुटियों के समाप्त हुआ1: कम से कम एक अनदबाया गया निष्कर्ष या प्रसंस्करण त्रुटि0 लौटाने के लिए -no-fail का उपयोग करेंGosec को केवल नियमों के एक उपसमूह को चलाने, कुछ फ़ाइल पथों को बाहर करने, और विभिन्न प्रारूपों में रिपोर्ट तैयार करने के लिए कॉन्फ़िगर किया जा सकता है। डिफ़ॉल्ट रूप से सभी नियम प्रदान की गई इनपुट फ़ाइलों के विरुद्ध चलाए जाएंगे। वर्तमान निर्देशिका से पुनरावृत्तीय रूप से स्कैन करने के लिए आप इनपुट तर्क के रूप में ./... प्रदान कर सकते हैं।
gosec इन श्रेणियों में नियम शामिल करता है:
G1xx: सामान्य सुरक्षित कोडिंग मुद्दे (उदाहरण के लिए हार्डकोडेड क्रेडेंशियल, असुरक्षित उपयोग, HTTP हार्डनिंग, कुकी सुरक्षा)G2xx: क्वेरी/टेम्पलेट/कमांड निर्माण में इंजेक्शन जोखिमG3xx: फ़ाइल और पथ हैंडलिंग जोखिम (अनुमतियाँ, ट्रैवर्सल, अस्थायी फ़ाइलें, आर्काइव निष्कर्षण)G4xx: क्रिप्टो और TLS कमजोरियाँG5xx: ब्लॉकलिस्टेड आयातG6xx: Go-विशिष्ट शुद्धता/सुरक्षा जाँच (उदाहरण के लिए रेंज एलियासिंग और स्लाइस बाउंड्स)G7xx: टेंट विश्लेषण नियम (SQL इंजेक्शन, कमांड इंजेक्शन, पथ ट्रैवर्सल, SSRF, XSS, लॉग, SMTP इंजेक्शन, SSTI, असुरक्षित डिसीरियलाइज़ेशन, और ओपन रीडायरेक्ट)पूरी सूची, नियम विवरण और प्रति-नियम कॉन्फ़िगरेशन के लिए, RULES.md देखें।
डिफ़ॉल्ट रूप से, gosec प्रदान की गई फ़ाइल पथों के विरुद्ध सभी नियम चलाएगा। हालांकि, -include= फ्लैग के माध्यम से चलाने के लिए नियमों का एक उपसमूह चुनना संभव है, या -exclude= फ्लैग का उपयोग करके स्पष्ट रूप से बाहर करने के लिए नियमों का एक सेट निर्दिष्ट करना संभव है।```bash
$ gosec -include=G101,G203,G401 ./...
$ gosec -exclude=G303 ./...
### CWE मैपिंग
`gosec` द्वारा पाई गई प्रत्येक समस्या एक
[CWE (सामान्य दुर्बलता गणना)](http://cwe.mitre.org/data/index.html)
में मैप की जाती है, जो कमजोरी को अधिक सामान्य शब्दों में वर्णित करता है। सटीक मैपिंग
[यहाँ](https://github.com/securego/gosec/blob/master/issue/issue.go#L50)
पाई जा सकती है।
### कॉन्फ़िगरेशन
निम्नलिखित अनुसार एक कॉन्फ़िगरेशन फ़ाइल में अनेक वैश्विक सेटिंग्स प्रदान की जा सकती हैं:```JSON
{
"global": {
"nosec": "enabled",
"audit": "enabled"
}
}
nosec: यह सेटिंग कोड बेस में परिभाषित सभी #nosec निर्देशों को ओवरराइट कर देगी
कोड बेस में परिभाषितaudit: ऑडिट मोड में चलता है जो अतिरिक्त जांचों को सक्षम करता है
जो सामान्य कोड विश्लेषण के लिए बहुत अधिक दखल देने वाली हो सकती हैं```bash$ gosec -conf config.json .
### पथ-आधारित नियम अपवाद
एकाधिक घटकों वाले बड़े भंडारों को विभिन्न पथों के लिए अलग-अलग सुरक्षा नियमों की आवश्यकता हो सकती है। विशिष्ट पथों के लिए विशिष्ट नियमों को दबाने के लिए `exclude-rules` का उपयोग करें।
**कॉन्फ़िगरेशन फ़ाइल:**```json
{
"exclude-rules": [
{
"path": "cmd/.*",
"rules": ["G204", "G304"]
},
{
"path": "scripts/.*",
"rules": ["*"]
}
]
}
CLI Flag:```bash
gosec --exclude-rules="cmd/.*:G204,G304" ./...
gosec --exclude-rules="scripts/.:" ./...
gosec --exclude-rules="cmd/.:G204,G304;test/.:G101" ./...
| Field | Type | Description |
|-------|------|-------------|
| `path` | string (regex) | फ़ाइल पथों से मेल खाने वाला regex |
| `rules` | []string | बहिष्कृत करने के लिए नियम आईडी। `*` सभी के लिए |
#### नियम विन्यास
कुछ नियम विन्यास फ़्लैग भी स्वीकार करते हैं; ये फ़्लैग
[RULES.md](https://github.com/securego/gosec/blob/master/RULES.md) में प्रलेखित हैं।
#### Go संस्करण
कुछ नियमों के लिए एक विशिष्ट Go संस्करण की आवश्यकता होती है जो परियोजना में मौजूद Go मॉड्यूल फ़ाइल से प्राप्त किया जाता है। यदि यह संस्करण नहीं मिल पाता, तो यह Go रनटाइम संस्करण पर फ़ॉलबैक करेगा।
Go मॉड्यूल संस्करण को `go list` कमांड का उपयोग करके पार्स किया जाता है
जो कुछ मामलों में प्रदर्शन में गिरावट का कारण बन सकता है। इस
स्थिति में, पर्यावरण चर
`GOSECGOVERSION=go1.21.1` सेट करके Go मॉड्यूल संस्करण आसानी से प्रदान किया जा सकता है।
### निर्भरताएँ
gosec Go मॉड्यूल का उपयोग करके पैकेज लोड करता है। अधिकांश परियोजनाओं में,
स्कैनिंग के दौरान निर्भरताएँ स्वचालित रूप से हल हो जाती हैं।
यदि निर्भरताएँ गायब हैं, तो चलाएँ:```bash
go mod tidy
go mod download
gosec सभी पैकेजों और आपकी वेंडर निर्देशिका में किसी भी निर्भरता में परीक्षण फाइलों को अनदेखा करेगा।
परीक्षण फाइलों की स्कैनिंग को निम्नलिखित फ्लैग के साथ सक्षम किया जा सकता है:```bash gosec -tests ./...
इसके अतिरिक्त, अतिरिक्त फ़ोल्डरों को निम्नानुसार बाहर रखा जा सकता है:```bash
gosec -exclude-dir=rules -exclude-dir=cmd ./...
gosec डिफ़ॉल्ट जनरेटेड कोड कमेंट के साथ जनरेटेड go फ़ाइलों को अनदेखा कर सकता है।``` // Code generated by some generator DO NOT EDIT.
Please provide the Markdown content you would like me to translate.```bash
gosec -exclude-generated ./...
gosec AI अनुशंसा के आधार पर सुधार सुझा सकता है। यह एक सुरक्षा खोज के लिए सुझाव प्राप्त करने हेतु AI API को कॉल करेगा।
आप निम्नलिखित कमांड लाइन आर्गुमेंट प्रदान करके इस सुविधा को सक्षम कर सकते हैं:
ai-api-provider: AI API प्रदाता का नाम।
समर्थित प्रदाता:
atlas (डिफ़ॉल्ट मॉडल
deepseek-ai/deepseek-v4-flash),
atlas-deepseek-v4-flash,
atlas-qwen3-coder-next, atlas-kimi-k2.6, या
atlas:<model-id> किसी भी Atlas Cloud होस्टेड चैट मॉडल के लिए।
Atlas Cloud एक OpenAI-संगत प्रदाता है, जो
atlascloud.ai पर उपलब्ध हैgemini-3-pro-preview (डिफ़ॉल्ट),
gemini-2.5-pro, gemini-2.5-flash,
gemini-2.5-flash-liteclaude-sonnet-4-6 (डिफ़ॉल्ट),
, ,
, ,
🎁 Atlas Cloud एक फुल-मोडल AI अनुमान प्लेटफॉर्म है जो डेवलपर्स को वीडियो जनरेशन, इमेज जनरेशन और LLM APIs तक पहुँचने के लिए एक एकल AI API प्रदान करता है। कई विक्रेता एकीकरण प्रबंधित करने के बजाय, आप एक बार कनेक्ट होते हैं और सभी मोडैलिटी में 300+ क्यूरेटेड मॉडलों तक एकीकृत पहुँच प्राप्त करते हैं।
अधिक बजट-अनुकूल API एक्सेस के लिए Atlas Cloud के नए कोडिंग प्लान प्रमोशन को देखें: https://www.atlascloud.ai/console/coding-plan
उदाहरण:```bash
export GOSEC_AI_API_KEY="your_key" export GOSEC_AI_PROVIDER="atlas" gosec ./...
GOSEC_AI_API_KEY="your_key"
gosec -ai-api-provider="atlas:qwen/qwen3-coder-next" ./...
gosec -ai-api-provider="gemini-3-pro-preview"
-ai-api-key="your_key" ./...
gosec -ai-api-provider="claude-sonnet-4-6"
-ai-api-key="your_key" ./...
gosec -ai-api-provider="gpt-5.4"
-ai-api-key="your_key" ./...
gosec -ai-api-provider="gpt-5.4"
-ai-api-key="your_azure_key"
-ai-base-url="https://your-resource.openai.azure.com/openai/deployments/your-deployment"
./...
gosec -ai-api-provider="llama3.2"
-ai-base-url="http://localhost:11434/v1"
./...
gosec -ai-api-provider="custom-model"
-ai-api-key="your_key"
-ai-base-url="https://internal-api.company.com/v1"
-ai-skip-ssl
./...
### कोड को एनोटेट करना
सभी स्वचालित पहचान उपकरणों की तरह, यहाँ भी गलत सकारात्मकता (false positives) के मामले होंगे। ऐसे मामलों में जहाँ gosec एक विफलता की रिपोर्ट करता है जिसे मैन्युअल रूप से सुरक्षित सत्यापित किया गया है, तो कोड को `#nosec` से शुरू होने वाली टिप्पणी से एनोटेट करना संभव है।
`#nosec` टिप्पणी का प्रारूप `#nosec [RuleList] [-- Justification]` होना चाहिए।
`#nosec` टिप्पणी को उस पंक्ति पर रखा जाना चाहिए जहाँ चेतावनी रिपोर्ट की गई है।```go
func main() {
tr := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // #nosec G402
},
}
client := &http.Client{Transport: tr}
_, err := client.Get("https://go.dev/")
if err != nil {
fmt.Println(err)
}
}
जब किसी विशिष्ट झूठी सकारात्मकता (false positive) की पहचान की गई हो और उसे सुरक्षित माना गया हो, तो आप कोड के एक भाग में केवल उस एक नियम (या नियमों के एक विशिष्ट सेट) को दबाना (suppress) चाह सकते हैं, जबकि अन्य समस्याओं के लिए स्कैन जारी रख सकते हैं। ऐसा करने के लिए, आप #nosec एनोटेशन के अंदर दबाए जाने वाले नियम(नों) को सूचीबद्ध कर सकते हैं, उदाहरण के लिए: /* #nosec G401 */ या //#nosec G201 G202 G203
आप एनोटेशन के लिए विवरण या औचित्य पाठ (justification text) रख सकते हैं। औचित्य दबाए जाने वाले नियम(नों) के बाद होना चाहिए और दो या अधिक डैश से शुरू होना चाहिए, उदाहरण के लिए: //#nosec G101 G102 -- This is a false positive
वैकल्पिक रूप से, gosec //gosec:disable निर्देश का भी समर्थन करता है, जो #nosec के समान कार्य करता है:```go
//gosec:disable G101 -- This is a false positive
कुछ मामलों में आप उन स्थानों पर पुनर्विचार करना चाह सकते हैं जहाँ
`#nosec` या `//gosec:disable` एनोटेशन का उपयोग किया गया है।
स्कैनर को चलाने और किसी भी `#nosec` एनोटेशन को अनदेखा करने के लिए आप निम्नलिखित कर सकते हैं:```bash
gosec -nosec=true ./...
एनोटेशन को अनजाने में असंबंधित नियमों को दबाने से, या बिना स्पष्टीकरण के जोड़े जाने से रोकने के लिए, gosec दो ऑप्ट-इन फ़्लैग स्वीकार करता है। दोनों डिफ़ॉल्ट रूप से false हैं, इसलिए मौजूदा कोडबेस अपरिवर्तित काम करते रहते हैं।
-nosec-require-rules उन नंगे #nosec /
//gosec:disable निर्देशों को अस्वीकार करता है जो किसी भी नियम आईडी को सूचीबद्ध नहीं करते हैं।-nosec-require-justification उन निर्देशों को अस्वीकार करता है जो नियम सूची के बाद -- justification नहीं रखते हैं।जब सक्षम किया जाता है, तो एक निर्देश जो जांच में विफल रहता है, वह किसी भी खोज को दबा नहीं पाता है और आउटपुट में एक त्रुटि के रूप में रिपोर्ट किया जाता है, साथ ही लाइन पर किसी भी अंतर्निहित समस्या के साथ।```bash gosec -nosec-require-rules -nosec-require-justification ./...
वही विकल्प ग्लोबल कॉन्फ़िग ब्लॉक के माध्यम से सेट किए जा सकते हैं:```json
{
"global": {
"nosec-require-rules": "enabled",
"nosec-require-justification": "enabled"
}
}
जैसा कि ऊपर वर्णित है, हम उल्लंघनों को बाह्य रूप से (-include/-exclude का उपयोग करके) या इनलाइन (#nosec एनोटेशन का उपयोग करके) दबा सकते हैं। दमन मेटाडेटा ऑडिटिंग के लिए उत्सर्जित किया जा सकता है।
-track-suppressions के साथ दमन ट्रैकिंग सक्षम करें:```bash
gosec -track-suppressions -exclude=G101
-fmt=sarif -out=results.sarif ./...
- बाहरी दमन के लिए, gosec दमन जानकारी रिकॉर्ड करता है
जहाँ `kind` `external` है और `justification`
`Globally suppressed.` है।
- इनलाइन दमन के लिए, gosec दमन जानकारी रिकॉर्ड करता है
जहाँ `kind` `inSource` है और `justification` टिप्पणी में
दो या अधिक डैश के बाद का पाठ है।
**नोट:** केवल SARIF और JSON प्रारूप दमन ट्रैकिंग का समर्थन करते हैं।
### बिल्ड टैग्स
gosec आपके
[Go build tags](https://pkg.go.dev/go/build/) को विश्लेषक को पास करने में सक्षम है।
उन्हें अल्पविराम से अलग की गई सूची के रूप में प्रदान किया जा सकता है:```bash
gosec -tags debug,ignore ./...
gosec text, json, yaml, csv, junit-xml,
html, sonarqube, golint, और sarif का समर्थन करता है। डिफ़ॉल्ट रूप से,
परिणाम stdout पर रिपोर्ट किए जाएंगे, लेकिन उन्हें किसी आउटपुट फ़ाइल में भी लिखा जा सकता है।
आउटपुट प्रारूप -fmt फ़्लैग द्वारा नियंत्रित किया जाता है, और आउटपुट फ़ाइल -out फ़्लैग द्वारा नियंत्रित की जाती है जैसा कि निम्नलिखित है:```bash
$ gosec -fmt=json -out=results.json *.go
`-stdout` का उपयोग करके `-out` लिखते हुए परिणाम प्रिंट करें।
`-verbose` का उपयोग करके stdout प्रारूप को ओवरराइड करें जबकि फ़ाइल प्रारूप को संरक्षित रखें।```bash
# Write output in json format to results.json as well as stdout
$ gosec -fmt=json -out=results.json -stdout *.go
# Overrides the output format to 'text' when stdout the results,
# while writing it to results.json
$ gosec -fmt=json -out=results.json -stdout -verbose=text *.go
नोट: gosec SonarQube के लिए
generic issue import format
उत्पन्न करता है, और एक रिपोर्ट को SonarQube में
sonar.externalIssuesReportPaths=path/to/gosec-report.json
का उपयोग करके आयात किया जाना चाहिए।
gosec -severity medium ./...
gosec -confidence medium ./...
gosec --exclude-rules="cmd/.:G204,G304;scripts/.:*" ./...
gosec -exclude-generated ./...
gosec -tests ./...
## विकास
विकास दस्तावेज़ को यहाँ स्थानांतरित कर दिया गया है
[DEVELOPMENT.md](https://github.com/securego/gosec/blob/HEAD/DEVELOPMENT.md)।
## gosec का उपयोग कौन कर रहा है?
यह gosec के कुछ उपयोगकर्ताओं की एक [सूची](https://github.com/securego/gosec/blob/HEAD/USERS.md) है।
## प्रायोजक
प्रायोजक बनकर इस परियोजना का समर्थन करें। आपका लोगो आपकी वेबसाइट के लिंक के साथ यहाँ दिखाई देगा।
<a href="https://github.com/mercedes-benz" target="_blank"><img src="https://assets.kitploit.com/production/public/readmes/2947/08b6f9da5faff0e986172b0c77fed0865a2cb26e6f8c58a8ae588c74bcf16f5f.png"></a>
claude-opus-4-7claude-opus-4-6claude-sonnet-4-5claude-opus-4-5claude-haiku-4-5gpt-5.4 (डिफ़ॉल्ट), gpt-5.4-mini,
gpt-5.4-nanoai-base-url आवश्यक है)ai-api-key या पर्यावरण चर सेट करें
GOSEC_AI_API_KEY: AI API तक पहुँचने के लिए कुंजी
ai-base-url: (वैकल्पिक) OpenAI-संगत APIs के लिए कस्टम आधार URL
(जैसे, Azure OpenAI, LocalAI,
Ollama)
https://api.atlascloud.ai/v1 का उपयोग करता है,
इसलिए बिल्ट-इन atlas प्रदाता के लिए ai-base-url वैकल्पिक हैGOSEC_AI_PROVIDER: (वैकल्पिक) पर्यावरण चर
ai-api-provider का विकल्पGOSEC_AI_BASE_URL: (वैकल्पिक) पर्यावरण चर
ai-base-url का विकल्पai-skip-ssl: (वैकल्पिक) AI API के लिए SSL प्रमाणपत्र सत्यापन छोड़ें
(स्व-हस्ताक्षरित प्रमाणपत्रों के लिए उपयोगी)