mcpField
O
owasp

owasp

github.com/claude-dev-suiteセキュリティ4658 回インストール2 日前に更新
リポジトリ

owasp について

owaspは、開発者やコードレビュー担当者向けのセキュリティ参照スキルです。OWASP Top 10(2021)に沿って、脆弱性の例や対策、トラブルシューティングをまとめています。

主な機能

  1. 01OWASP Top 10(2021)の参照
  2. 02一般的なセキュリティ対策例
  3. 03コードレビューのアンチパターン
  4. 04トラブルシューティング情報

活用シーン

  1. 01アクセス制御やインジェクションのリスクをコードレビュー
  2. 02パスワードやログインの保護を強化
  3. 03セキュリティ設定とログ処理を確認

MCP 対応

READMEでは、詳細なOWASPドキュメントの取得にmcp__documentation__fetch_docsを利用できると説明されています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill owasp

インストール後、Claude Code で/owaspを入力して読み込まれたか確認します。

詳細

OWASP セキュリティ - クイックリファレンス

このスキルを使用する場面

  • よくある脆弱性を特定する
  • セキュリティ制御を実装する
  • セキュリティ上の問題についてコードレビューを行う

このスキルを使用しない場面

  • OWASP Top 10:2025 - 最新の2025年の基準については、owasp-top-10 スキルを使用してください
  • シークレット管理 - 認証情報の取り扱いについては、secrets-management スキルを使用してください
  • サプライチェーンセキュリティ - 依存関係の問題については、supply-chain スキルを使用してください
  • JWT/OAuth セキュリティ - プロトコル固有の問題については、認証スキルを使用してください

詳細な知識:包括的なドキュメントについては、technology に owasp を指定して mcp__documentation__fetch_docs を使用してください。

OWASP Top 10(2021年)

A01:アクセス制御の不備
// BAD - Direct object reference
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
    return userRepository.findById(id);
}

// GOOD - Check authorization
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id, Authentication auth) {
    User user = userRepository.findById(id);
    if (!user.getId().equals(auth.getPrincipal().getId())) {
        throw new AccessDeniedException("Not authorized");
    }
    return user;
}
A02:暗号化の失敗
// BAD - Weak hashing
String hash = DigestUtils.md5Hex(password);

// GOOD - Strong hashing with salt
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String hash = encoder.encode(password);
A03:インジェクション
// BAD - SQL Injection
String query = "SELECT * FROM users WHERE name = '" + name + "'";

// GOOD - Parameterized query
@Query("SELECT u FROM User u WHERE u.name = :name")
User findByName(@Param("name") String name);
A04:安全でない設計
  • 設計段階での脅威モデリング
  • ユーザーストーリーにおけるセキュリティ要件
  • 多層防御アーキテクチャ
A05:セキュリティ設定ミス
# Spring Security - disable defaults carefully
spring:
  security:
    headers:
      content-security-policy: "default-src 'self'"
      x-frame-options: DENY
      x-content-type-options: nosniff
A06:脆弱なコンポーネント
# Check for vulnerabilities
npm audit
mvn dependency-check:check
pip-audit
A07:認証の失敗
// Implement rate limiting
@RateLimiter(name = "login", fallbackMethod = "loginFallback")
public AuthResponse login(LoginRequest request) {
    // ...
}

// Account lockout
if (failedAttempts >= 5) {
    lockAccount(user);
}
A08:ソフトウェアの完全性
  • 依存関係の署名を検証する
  • ロックファイル(package-lock.json、pom.xml)を使用する
  • CI/CD パイプラインのセキュリティ
A09:ログ記録の失敗
// Log security events
log.info("Login attempt", Map.of(
    "user", username,
    "ip", request.getRemoteAddr(),
    "success", authenticated
));

// DON'T log sensitive data
log.info("Password: {}", password);  // NEVER!
A10:SSRF
// Validate URLs
private boolean isAllowedUrl(String url) {
    URL parsed = new URL(url);
    return allowedHosts.contains(parsed.getHost());
}

セキュリティヘッダー

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) {
        return http
            .headers(headers -> headers
                .contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'"))
                .frameOptions(frame -> frame.deny())
                .xssProtection(xss -> xss.disable())
            )
            .build();
    }
}

アンチパターン

アンチパターン問題点正しいアプローチ
認証なしの直接オブジェクト参照IDOR の脆弱性(A01)アクセス前に必ず所有権を確認する
パスワードに MD5/SHA1 を使用する簡単に解読されるソルト付きの bcrypt/argon2 を使用する
SQL での文字列連結SQL インジェクションパラメーター化クエリ/ORM を使用する
本番環境でスタックトレースを公開する情報漏えい汎用的なエラーメッセージのみを表示する
ログイン時にレート制限がないブルートフォース攻撃レート制限とアカウントロックアウトを実装する
コードにシークレットを保存する認証情報の漏えい環境変数/ボールトを使用する

簡単なトラブルシューティング

問題考えられる原因解決策
有効なリクエストで 403 Forbidden が発生するCORS の設定ミスCORS 設定で許可されたオリジンを確認する
セッションが保持されないSameSite Cookie の問題HTTPS を使用して SameSite=Lax または None を設定する
JWT トークンが拒否されるクロックスキューまたは期限切れクロックスキューの許容範囲(5min)を設定する
ファイルのアップロードに失敗するCSP によるブロックCSP ディレクティブにアップロードドメインを追加する
API が予期せず 401 を返すAuthorization ヘッダーがない、または無効Bearer トークンの形式を確認する

コメント