---
title: 脆弱性診断でCSRFの脆弱性が検出されました。Kurocoではどのように対応すればいいですか？
description: KurocoはAPIベースのヘッドレスCMSです。CORSでAccess-Control-Allow-Originに特定のドメインを指定し、かつリクエストヘッダーにContent-Type: application/jsonが必須である場合、モダンブラウザにおいてはCSRF攻撃は成立しません。
category: security
---

import StructuredDataFaqs from '@site/src/components/StructuredDataFaqs';

<StructuredDataFaqs faqs={[
    { question: "脆弱性診断でCSRFの脆弱性が検出されました。Kurocoではどのように対応すればいいですか？", answer: "KurocoはAPIベースのヘッドレスCMSです。CORSでAccess-Control-Allow-Originに特定のドメインを指定し、かつリクエストヘッダーにContent-Type: application/jsonが必須である場合、モダンブラウザにおいてはCSRF攻撃は成立しません。" }
]} />

KurocoはAPIベースのヘッドレスCMSであり、フロントエンドとバックエンドが分離したアーキテクチャを採用しています。
このため、従来のCMSとは異なるCSRF(Cross-Site Request Forgery)対策のアプローチが必要です。

## Kurocoにおけるデフォルトの安全性

Kurocoでは、以下の2つの条件により、デフォルトでCSRF攻撃から保護されています。

1. **CORSによるオリジン制限**
   - Access-Control-Allow-Originヘッダーで特定のドメインを指定
2. **Content-Type: application/jsonの使用**
   - APIリクエストのリクエストヘッダーにContent-Type: application/jsonが必要

これらの条件を満たす場合、モダンブラウザにおいてはCSRF攻撃は成立しません。

## CSRF攻撃が成立しない仕組み

### 1. プリフライトリクエストの発生
Content-Type: application/jsonを使用するリクエストは、ブラウザによって自動的にプリフライトリクエスト(OPTIONSメソッド)が送信されます。

### 2. CORSチェックによるブロック
プリフライトリクエストの段階で、サーバーのCORS設定により許可されていないオリジンからのリクエストはブロックされます。

### 3. 攻撃者の制約
攻撃者が悪意のあるサイトから以下のようなリクエストを送信しようとしても:
- HTMLフォームでは`Content-Type: application/json`を送信できない
- JavaScriptでContent-Typeを指定した場合、プリフライトリクエストが発生しCORSチェックでブロックされる

## 具体的な対応方法

脆弱性診断でCSRFの指摘を受けた場合、以下の設定を確認してください。

### 1. CORS設定の確認
管理画面より[API] → [セキュリティ] → [CORS]で、Access-Control-Allow-Originに許可するドメインを明示的に指定してください。

```
例: https://example.com
```

:::caution 重要
ワイルドカード(*)を使用すると、すべてのオリジンからのリクエストが許可されるため、CSRF攻撃への防御効果がなくなります。必ず特定のドメインを指定してください。
:::

### 2. APIエンドポイント設定の確認
APIエンドポイントが`Content-Type: application/json`でのリクエストを必須としていることを確認してください。
Kurocoの標準的なAPIエンドポイントは、デフォルトでJSON形式のリクエストを前提としています。

### 3. フロントエンド実装の確認
フロントエンドのAPI呼び出しで、以下のように`Content-Type: application/json`を明示的に指定していることを確認してください。

```javascript
fetch('https://your-kuroco-domain.com/rcms-api/1/endpoint', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(data)
});
```

## 診断結果への対応

脆弱性診断の結果に対して、以下のように説明することができます:

「本システムはAPIベースのヘッドレスCMSであるKurocoを採用しており、以下の理由によりCSRF攻撃への対策が実施されています:

1. CORS設定により、許可されたオリジン(ドメイン)からのリクエストのみを受け付けています
2. APIリクエストはContent-Type: application/jsonを必須としており、プリフライトリクエストによるCORSチェックが行われます
3. この2つの条件により、攻撃者が悪意のあるサイトから正規のAPIへリクエストを送信することはできません」

:::info
上記の説明で不十分な場合や、追加のエビデンスが必要な場合は、[弊社サポート](https://kuroco.zendesk.com/)までご連絡ください。
:::

## 注意事項

この防御方法は、以下の条件下でのみ有効です:

- ブラウザがCORSポリシーを正しく実装している(モダンブラウザではすべて対応)
- APIがContent-Type: application/jsonのみを受け付ける設計になっている
- ワイルドカード(*)ではなく、特定のドメインをCORSに指定している
- フロントエンドの実装が適切に行われている

## 関連ドキュメント
- [CORS設定の変更が反映されません。](/ja/docs/faq/i-changed-cors-but-it-is-not-reflected/)
- [制限をかけていないのにAPIから403 forbidden が返ってきます](/ja/docs/faq/the-api-returns-403-forbidden-even-though-no-restrictions-are-applied/)
- [セキュリティ](/ja/docs/about/security/)
