golang-security
GoのコードにおけるSQLインジェクション・コマンドインジェクション・XSS等の各種インジェクション対策、暗号化、ファイルシステム安全性、ネットワークセキュリティ、Cookie管理、シークレット管理、メモリ安全性、ロギングなどのセキュリティベストプラクティスと脆弱性防止を網羅するスキル。Goコードの新規作成・レビュー・監査時、または暗号処理・I/O・シークレット管理・ユーザー入力処理・認証に関わるリスクの高いコードを扱う際に適用され、セキュリティツールの設定も含みます。
description の原文を見る
Security best practices and vulnerability prevention for Golang. Covers injection (SQL, command, XSS), cryptography, filesystem safety, network security, cookies, secrets management, memory safety, and logging. Apply when writing, reviewing, or auditing Go code for security, or when working on any risky code involving crypto, I/O, secrets management, user input handling, or authentication. Includes configuration of security tools.
SKILL.md 本文
ペルソナ: あなたはシニア Go セキュリティエンジニアです。既存コードの監査時も新しいコード作成時も、セキュリティ思考を適用します。脅威は修正するより防ぐ方が簡単です。
思考モード: セキュリティ監査と脆弱性分析には ultrathink を使用してください。セキュリティバグは微妙な相互作用に隠れています。深い推論は表面的なレビューでは見落とすものを見つけます。
モード:
- レビューモード — PR のセキュリティ問題をレビューします。変更されたファイルから始めて、呼び出しサイトと隣接するコードへのデータフローをトレースします。脆弱性は diff の外に存在しますが、それによってトリガーされる可能性があります。順序立てた処理です。
- 監査モード — フルコードベースのセキュリティスキャンです。Agent ツールを使用して最大 5 つの並列サブエージェントを起動し、それぞれが独立した脆弱性領域をカバーします: (1) インジェクションパターン、(2) 暗号化とシークレット、(3) Web セキュリティとヘッダー、(4) 認証と認可、(5) 並行性安全性と依存関係の脆弱性。検出結果を集約し、DREAD でスコア付けし、重大度別にレポートします。
- コーディングモード — 新しいコードを作成するか報告された脆弱性を修正するときに使用します。スキルの順序立てたガイダンスに従います。オプションで、メインエージェントが機能の実装を続ける間に、新しく作成されたコード内で一般的な脆弱性パターンを grep するバックグラウンドエージェントを起動できます。
Go セキュリティ
概要
Go のセキュリティは 多層防御 の原則に従います: 複数のレイヤーで保護し、すべての入力を検証し、セキュアなデフォルトを使用し、標準ライブラリのセキュリティ対応設計を活用します。Go の型システムと並行処理モデルは固有の保護を提供していますが、警戒は依然として必要です。
セキュリティ思考モデル
コードを作成またはレビューする前に、3 つの質問を自問してください:
- 信頼境界は何ですか? — 信頼されていないデータはどこでシステムに入りますか? (HTTP リクエスト、ファイルアップロード、環境変数、他のサービスで書き込まれたデータベース行)
- 攻撃者が制御できるものは何ですか? — どの入力が機密操作に流れ込みますか? (SQL クエリ、シェルコマンド、HTML 出力、ファイルパス、暗号化操作)
- 爆発範囲は何ですか? — この防御が失敗した場合、最悪の結果は何ですか? (データ漏洩、RCE、特権昇格、サービス拒否)
重大度レベル
| レベル | DREAD | 意味 |
|---|---|---|
| Critical | 8-10 | RCE、完全なデータ流出、認証情報盗難 — 直ちに修正 |
| High | 6-7.9 | 認証回避、重大なデータ流出、暗号化破損 — 現在のスプリントで修正 |
| Medium | 4-5.9 | 限定的な流出、セッション問題、防御の弱体化 — 次のスプリントで修正 |
| Low | 1-3.9 | 軽微な情報開示、ベストプラクティス逸脱 — 機会的に修正 |
レベルは DREAD スコアリング と一致しています。
報告前の調査
セキュリティ問題にフラグを立てる前に、コードベース全体のデータフローを追跡してください。コードスニペットを単独で評価してはいけません。
- データ発信元をトレース — 変数をそれがシステムに入る場所まで遡ります。ユーザー入力ですか、ハードコードされた定数ですか、内部のみの値ですか?
- 上流検証をチェック — 入力検証、サニタイズ、型パース、またはコール チェーンの前のアロー リストを探します。
- 信頼境界を検証 — データが信頼境界を越えることがない場合 (例: mTLS 付きの内部サービス間通信)、リスク プロファイルは異なります。
- diff だけでなく周囲のコードを読む — ミドルウェア、インターセプター、またはラッパー関数は既に防御層を提供している可能性があります。
重大度調整、却下ではない: 上流の保護が検出結果を排除しません。多層防御とは、すべてのレイヤーが自身を保護すべきであることを意味します。しかし重大度は変わります: 厳密な入力パーサーを通じてのみ到達可能な SQL 連結は、重大ではなく中程度です。常に調整された重大度で検出結果を報告し、存在する上流防御と、それらが削除または回避された場合に何が起こるかに注記してください。
検出結果をダウングレードまたはスキップする場合: 簡潔なインライン コメントを追加してください (例: // security: SQL concat safe here — input is validated by parseUserID() which returns int)。決定が記録可能で、レビュー可能で、将来の監査で再度フラグされません。
脅威モデリング (STRIDE)
すべての信頼境界交差とシステムのデータフローに STRIDE を適用してください: Spoofing (認証)、Tampering (整合性)、Repudiation (監査ログ)、Information Disclosure (暗号化)、Denial of Service (レート制限)、Elevation of Privilege (認可)。DREAD (ダメージ、再現性、悪用可能性、影響を受けるユーザー、発見可能性) を使用して各脅威をスコア付けし、修復を優先付けします。Critical (8-10) は直ちに対応を要求します。
Go の例、DFD 信頼境界、DREAD スコアリング、OWASP Top 10 マッピングを含む完全な方法論については、脅威モデリングガイド を参照してください。
クイックリファレンス
| 重大度 | 脆弱性 | 防御 | 標準ライブラリソリューション |
|---|---|---|---|
| Critical | SQL インジェクション | パラメーター化クエリはコードからデータを分離 | database/sql の ? プレースホルダー付き |
| Critical | コマンドインジェクション | args を別々に渡す、シェル連結経由ではなく | exec.Command と分離された args |
| High | XSS | 自動エスケープはユーザーデータをテキストとして、HTML/JS ではなくレンダリング | html/template、text/template |
| High | パストラバーサル | ファイルアクセスをルートにスコープし、../ エスケープを防止 | os.Root (Go 1.24+)、filepath.Clean |
| Medium | タイミング攻撃 | 定時間比較はバイト単位のリークを回避 | crypto/subtle.ConstantTimeCompare |
| High | 暗号化の問題 | ベット検証アルゴリズムを使用、独自の実装は避ける | crypto/aes、crypto/rand |
| Medium | HTTP セキュリティ | TLS + セキュリティヘッダーはダウングレード攻撃を防止 | net/http、TLSConfig の設定 |
| Low | ヘッダー欠落 | HSTS、CSP、X-Frame-Options はブラウザ攻撃を防止 | セキュリティヘッダーミドルウェア |
| Medium | レート制限 | レート制限はブルートフォースとリソース枯渇を防止 | golang.org/x/time/rate、サーバータイムアウト |
| High | 競合状態 | 共有状態を保護してデータ破損を防止 | sync.Mutex、チャネル、共有状態を避ける |
詳細カテゴリ
完全な例、コードスニペット、CWE マッピングについては、以下を参照してください:
暗号化— アルゴリズム、鍵導出、TLS 設定。インジェクション脆弱性— SQL、コマンド、テンプレートインジェクション、XSS、SSRF。ファイルシステムセキュリティ— パストラバーサル、zip ボム、ファイルパーミッション、シンボリックリンク。ネットワーク/Web セキュリティ— SSRF、オープンリダイレクト、HTTP ヘッダー、タイミング攻撃、セッション固定化。Cookie セキュリティ— Secure、HttpOnly、SameSite フラグ。サードパーティデータ漏洩— アナリティクスプライバシー リスク、GDPR/CCPA コンプライアンス。メモリ安全性— 整数オーバーフロー、メモリ エイリアシング、unsafe使用。シークレット管理— ハードコードされた認証情報、環境変数、シークレットマネージャー。ログセキュリティ— ログ内の PII、ログインジェクション、サニタイズ。脅威モデリングガイド— STRIDE、DREAD スコアリング、信頼境界、OWASP Top 10。セキュリティアーキテクチャ— 多層防御、Zero Trust、認証パターン、レート制限、アンチパターン。
コードレビュー チェックリスト
入力処理、データベース、暗号化、Web、認証、エラー、依存関係、並行性で整理された包括的なセキュリティレビュー チェックリストについては、セキュリティレビュー チェックリスト を参照してください。すべての主要な脆弱性カテゴリをカバーしています。
ツール & 検証
静的分析とリンティング
セキュリティ関連リンター: bodyclose、sqlclosecheck、nilerr、errcheck、govet、staticcheck。設定と使用については samber/cc-skills-golang@golang-lint スキルを参照してください。
より深いセキュリティ固有分析の場合:
# Go セキュリティチェッカー (SAST)
go install github.com/securego/gosec/v2/cmd/gosec@latest
gosec ./...
# 脆弱性スキャナー — 完全な govulncheck 使用については golang-dependency-management を参照
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
セキュリティテスト
# 競合検出器
go test -race ./...
# ファズテスト
go test -fuzz=Fuzz
よくある間違い
| 重大度 | 間違い | 修正 |
|---|---|---|
| High | トークンに math/rand を使用 | 出力は予測可能です。攻撃者はシーケンスを再現できます。crypto/rand を使用してください |
| Critical | SQL 文字列連結 | 攻撃者はクエリロジックを変更できます。パラメーター化クエリはコードとデータを分離します |
| Critical | exec.Command("bash -c") | シェルはメタ文字 (;、` |
| High | サニタイズされていない入力を信頼 | 信頼境界で検証してください。内部コードは境界を信頼するため、そこで不正な入力をキャッチするとすべてを保護します |
| Critical | ハードコードされたシークレット | ソースコード内のシークレットはバージョン履歴、CI ログ、バックアップに残ります。環境変数またはシークレットマネージャーを使用してください |
| Medium | == でシークレットを比較 | == は最初の異なるバイトで短絡し、タイミング情報を漏らします。crypto/subtle.ConstantTimeCompare を使用してください |
| Medium | 詳細なエラーを返す | スタックトレースと DB エラーは攻撃者がシステムをマップするのに役立ちます。汎用メッセージを返し、詳細をサーバー側でログしてください |
| High | -race の検出結果を無視 | 競合はデータ破損を引き起こし、並行性の下で認可チェックをバイパスできます。すべての競合を修正してください |
| High | パスワードに MD5/SHA1 を使用 | 両方とも既知の衝突攻撃があり、ブルートフォース攻撃も迅速です。Argon2id または bcrypt (意図的に遅く、メモリハード) を使用してください |
| High | GCM なしの AES | ECB/CBC モードは認証がなく、攻撃者は暗号文を検出されずに変更できます。GCM は暗号化 + 認証を提供します |
| Medium | 0.0.0.0 にバインド | すべてのネットワークインターフェースにサービスを公開します。攻撃面を制限するため特定インターフェースにバインドしてください |
セキュリティアンチパターン
| 重大度 | アンチパターン | 失敗理由 | 修正 |
|---|---|---|---|
| High | セキュリティ through 難解さ | 隠れた URL はファジング、ログ、ソースで発見可能 | すべてのエンドポイントに認証 + 認可 |
| High | クライアントヘッダーを信頼 | X-Forwarded-For、X-Is-Admin は簡単に偽造可能 | サーバー側アイデンティティ検証 |
| High | クライアント側認可 | JavaScript チェックはあらゆる HTTP クライアントでバイパス可能 | すべてのハンドラーでサーバー側パーミッション チェック |
| High | 環境間での共有シークレット | ステージング侵害は本番環境を危険にさらします | シークレットマネージャーを使用した環境ごとのシークレット |
| Critical | 独自の暗号化を実装 | カスタム暗号化は暗号学者によって分析されていません | crypto/aes GCM、golang.org/x/crypto/argon2 を使用 |
| Critical | 暗号化エラーを無視 | _, _ = encrypt(data) はサイレントに暗号化なしで進行 | 常にエラーをチェック。閉じられた状態で失敗、開かない |
詳細なアンチパターンと Go コード例については、セキュリティアーキテクチャ を参照してください。
相互参照
samber/cc-skills-golang@golang-database、samber/cc-skills-golang@golang-safety、samber/cc-skills-golang@golang-observability、samber/cc-skills-golang@golang-continuous-integration スキルを参照してください。
- → これらのガイドラインを使用した CI での自動化された AI 駆動型コードレビューについては
samber/cc-skills-golang@golang-continuous-integrationスキルを参照してください
追加リソース
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- samber
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/samber/cc-skills-golang / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。