API'niz C2PA Meta Verilerini Siliyor: Test Ederek Nasıl Tespit Edilir

Claude, Gemini ve OpenAI artık oluşturulan dosyalara imzalı C2PA manifestleri ekliyor, böylece gerçek menşe bilgisi yükleme uç noktanıza ulaşıyor ve hattınız muhtemelen onu siliyor. İki dakikalık bir curl bunu kanıtlar ve üç katmanlı bir test bunu düzeltir.

Ashley Innocent

Ashley Innocent

12 August 2026

API'niz C2PA Meta Verilerini Siliyor: Test Ederek Nasıl Tespit Edilir

Kurumsal İçin Apidog

Şirket İçi (On-Premises) Dağıtım

SSO ve RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfedin

Claude artık ürettiği dosyalara imzalı C2PA menşe metadata'sı ekliyor. OpenAI'ın görüntü modelleri de öyle ve Gemini de öyle. Bu, gerçek bir menşe sinyalinin ilk kez yükleme uç noktanıza ulaştığı ve büyük olasılıkla işlem hattınızın bunu kimse görmeden sildiği anlamına geliyor.

Kötü niyetle değil. Varsayılan olarak. sharp().resize(), aksi belirtilmedikçe metadata içermeyen temiz bir dosya üretir. ImageMagick de öyle. Pillow da öyle. Çoğu görüntü CDN'i de öyle. Bildirim içeri girer, daha küçük bir JPEG çıkar ve günlüklerinizde bundan hiçbir şey bahsedilmez.

Bu test edilebilir bir hatadır ve test karmaşık değildir. Metadata'nın normal bir işlem hattında nasıl kaybolduğunu, bunun gerçekleştiğini nasıl kanıtlayacağınızı ve geri gelmemesi için CI'ya gidiş-dönüş kontrolünü nasıl dahil edeceğinizi burada bulabilirsiniz. Apidog orkestrasyonu üstlenir; c2patool bayt düzeyinde doğrulamayı yapar.

Düğme

Gerçekte Neler Yok Oluyor

Bir C2PA bildirimi, dosya kapsayıcısına gömülü, kriptografik olarak imzalanmış bir bloktur. Varlığı kimin imzaladığını ve hakkında ne iddia edildiğini kaydeder ve imzalı olduğu için, baytları yeniden imzalamadan değiştirmek, imzayı herhangi bir okuyucunun tespit edebileceği bir şekilde bozar.

Kapsayıcı düzeyi kilit ifadedir. Kapsayıcıyı yeniden yazarsanız bildirim kaybolur.

İşlem Bildirim varsayılan olarak korunur mu?
Bayt bayt kopyalama veya taşıma Evet
sharp().resize().toBuffer() Hayır
ImageMagick convert / magick Hayır
Pillow Image.save() Hayır
PNG'den WebP'ye, JPEG'den AVIF'e Hayır
Görüntü CDN otomatik optimizasyonu Genellikle hayır
Ekran görüntüsü Hayır
Görüntü düzenleyiciden yeniden kaydetme Hayır
Dönüşüm olmadan S3 yüklemesi Evet

'Hayır' sütunundaki her şey, normal bir web uygulamasının kabul ettiği her görüntüye uyguladığı bir şeydir. Küçük resimler, duyarlı varyantlar, format anlaşması, gizlilik için EXIF temizliği. Her biri tek başına makuldür ve her biri menşe zincirini sessizce sona erdirir.

Dikkat çekmek gerekir ki: gizlilik odaklı -strip alışkanlığı genellikle kasıtlıdır, çünkü EXIF GPS koordinatları ve kamera seri numaralarını taşır. Konum verilerini kaldırmak için tüm metadata'yı sıyırmak, menşe bildirimini de kaldırır. Bu iki hedef şimdi çatışıyor ve bunu çözmek, tüm bloğu yok etmek yerine seçici olmak anlamına geliyor.

İki Dakikada Kanıtlayın

Bir şey inşa etmeden önce, sorunun sizde olduğunu doğrulayın. Geçerli bir bildirime sahip bir dosyaya ihtiyacınız var. Claude'un ürettiği herhangi bir görüntü işe yarar veya İçerik Doğruluk İnisiyatifi'nden imzalı bir örnek alabilirsiniz.

Referans CLI'yı yükleyin:

cargo install c2patool

Sabitin gerçekten imzalı olup olmadığını kontrol edin:

c2patool fixtures/signed-sample.png

İddia oluşturucuyu ve imza durumunu belirten bir JSON raporu almalısınız. Şimdi bunu kendi yığınınızdan geçirin ve diğer ucunu kontrol edin:

# Gerçek uç noktanız üzerinden yükleyin
curl -sS -X POST https://api.example.com/v1/assets \
  -H "Authorization: Bearer $API_TOKEN" \
  -F "file=@fixtures/signed-sample.png" \
  -o /tmp/upload.json

# Ön ucunuzun kullanacağı URL üzerinden geri alın
ASSET_URL=$(jq -r '.url' /tmp/upload.json)
curl -sS "$ASSET_URL" -o /tmp/roundtrip.png

# Bildirim korundu mu?
c2patool /tmp/roundtrip.png

Üç olası sonuç vardır ve bunlar farklı şeyler ifade eder:

Peşinden koşulacak üçüncü sonuç budur. Genellikle bir dönüştürme kütüphanesinin pikselleri yeniden yazarken metadata bloğunu koruduğu anlamına gelir.

Bunu Yapan Adımı Bulun

Gidiş-dönüş başarısız olursa, işlem hattını ikiye bölün. Tahmin etmek yerine her aşamadan hemen sonra bildirimi kontrol edin.

Olasılık sırasına göre tipik şüpheliler:

1. Yeniden boyutlandırma veya küçük resim adımı. En olası suçlu. sharp'ta, açıkça belirtmedikçe metadata atılır:

// C2PA bildirimini kaldırır
await sharp(input).resize(1200).toFile(output);

// Metadata bloğunu korur
await sharp(input).resize(1200).keepMetadata().toFile(output);

Bloğu korumak gerekli ancak yeterli değildir. Pikseller değiştiği için orijinal imza artık yeni baytlar için geçerli değildir. Çalışan bir menşe zinciri tutmak için çıktıyı yeniden imzalar ve dönüşümü bir eylem beyanı olarak kaydedersiniz, tipik olarak c2pa.resized. Rust, Python, JavaScript ve C için c2pa kütüphanelerinin hepsi bunu destekler.

2. Biçim dönüştürme. AVIF veya WebP sunmak yeni bir kapsayıcı anlamına gelir. Aynı kural: koru ve yeniden imzala, ya da zincirin orada bittiğini kabul et ve bunu belirt.

3. CDN. Birçok görüntü CDN'i teslimat sırasında yeniden yazar. Bazıları artık İçerik Kimlik Bilgilerini doğal olarak korur ve yeniden imzalar; çoğu tarihsel olarak bunları kaldırmıştır. Kullanıcılarınızın gerçekten kullandığı teslimat URL'si üzerinden test yapın, başlangıç noktası üzerinden değil, aksi takdirde hiçbir anlam ifade etmeyen yeşil bir sonuç alırsınız.

4. Yükleme normalizasyonu. Biçimleri standartlaştırmak için alım sırasında yeniden kodlama yapan hizmetler kolayca unutulur, çünkü kod kimsenin okumadığı bir altyapı deposunda yaşar.

Bunu Kalıcı Bir Test Haline Getirin

Tek seferlik bir curl bugünkü durumu kanıtlar. Bir sonraki sprintte birinin yeniden boyutlandırma adımı eklemesini engellemez. Kontrolün CI'da yaşaması gerekir.

İki katmana ayırın, çünkü iki farklı araç iki farklı şeyde iyidir.

Katman bir: Apidog'da gidiş-dönüş

Orkestrasyon, normal bir zincirlenmiş API testidir: bir sabit yükleyin, döndürülen URL'yi yakalayın, varlığı gerçek teslimat yoluyla geri alın, geri dönen şey üzerinde iddiada bulunun.

Apidog'da bu, iki adımlı bir test senaryosudur.

Adım 1: POST /v1/assets

const body = pm.response.json();
pm.environment.set("ASSET_URL", body.url);
pm.test("upload returns a delivery URL", function () {
    pm.expect(body.url).to.be.a("string").and.to.include("https://");
});

Adım 2: GET {{ASSET_URL}}

const uploadedBytes = Number(pm.environment.get("FIXTURE_BYTES"));
const returnedBytes = pm.response.responseSize;
pm.test("asset was not silently re-encoded", function () {
    pm.expect(returnedBytes).to.be.above(uploadedBytes * 0.9);
});

Boyut bir sezgisellik, bir kanıt değil. Yüksek sesli hataları ucuza yakalar ve diğer her şeyle aynı pakette çalışır. Standart onaylama kalıpları API onaylamalarında ele alınmıştır.

Katman iki: CI'da bayt düzeyinde kontrol

Bir imzayı doğrulamak, HTTP istemcisinin değil, c2patool'un işi olan kapsayıcıyı ayrıştırmak anlamına gelir. Bunu, gidiş-dönüşün getirdiği dosyaya karşı bir işlem hattı adımı olarak çalıştırın:

# .github/workflows/provenance.yml
name: provenance
on: [pull_request]

jobs:
  c2pa-round-trip:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install c2patool
        run: cargo install c2patool

      - name: Install Apidog CLI
        run: npm install -g apidog-cli

      - name: Run the round-trip scenario
        run: |
          apidog run --access-token "$APIDOG_ACCESS_TOKEN" \
            -t "$SCENARIO_ID" -e "$ENV_ID" -r cli,html --out-dir ./apidog-reports
        env:
          APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}
          SCENARIO_ID: ${{ vars.PROVENANCE_SCENARIO_ID }}
          ENV_ID: ${{ vars.APIDOG_ENV_ID }}

      - name: Verify the manifest survived
        run: |
          set -euo pipefail
          curl -sS "$ASSET_URL" -o /tmp/roundtrip.png
          c2patool /tmp/roundtrip.png > /tmp/report.json
          jq -e '.validation_status == null or (.validation_status | length) == 0' /tmp/report.json

set -euo pipefail önemlidir. Bu olmadan, c2patool sıyrılmış bir dosyada başarısız olduğunda bir uyarı ve yeşil bir derleme üretir ki bu, tam olarak önlemeye çalıştığınız hatadır. Bir işlem hattında Apidog senaryolarını çalıştırmaya yeni başlıyorsanız, GitHub Actions'ta API testlerini otomatikleştirmek kurulumu kapsar.

Katman üç, isteğe bağlı: bir doğrulama uç noktası

Menşe, dahili bir kontrol yerine bir ürün özelliği ise, en temiz tasarım, c2pa kütüphanesini çalıştıran ve yapılandırılmış bir sonuç döndüren kendi hizmetinizdeki küçük bir uç noktadır. O zaman her şey sıradan JSON olarak test edilebilir ve ön ucunuz bir tahmin yerine gerçek bir yanıt alır.

{
  "asset_id": "img_9f2c41",
  "provenance": {
    "status": "verified",
    "standard": "c2pa",
    "signer": "Anthropic",
    "signature_valid": true,
    "checked_at": "2026-08-11T09:14:22Z",
    "tool": "c2patool/0.9"
  }
}

İki değil, üç durumu koruyun. verified, absent ve invalid gerçekten farklı şeyler ifade eder ve absent ile invalid'ı tek bir boolean'a indirgemek sahip olduğunuz en ilginç sinyali çöpe atmak demektir. Doğrulayıcınız kullanılamaz durumdaysa unchecked ekleyin, böylece bir kesinti temiz bir sonuç gibi görünmez.

Şekli OpenAPI tanımınızda belgeleyin ve buna karşı doğrulayın, böylece alanlar bir yeniden düzenlemede kaybolmaz. OpenAPI spesifikasyonları nasıl doğrulanır bu tarafı kapsar.

Saklanmaya Değer Dört Sabit

Bir menşe paketi, sadece mutlu bir yol değil, kasıtlı olarak bozuk girdiler gerektirir.

  1. Geçerli imzalı dosya. verified beklenir. Aşırı hevesli sıyırmaları yakalar.
  2. Sıyırılmış dosya. Aynı görüntü, bildirim exiftool -all= ile kaldırıldı. Hata değil ve kesinlikle verified değil, absent beklenir.
  3. Kurcalanmış dosya. İmzalandıktan sonra bir baytı değiştirilmiş imzalı dosya. invalid beklenir. Bu, sadece bir bloğun var olup olmadığını kontrol etmek yerine imzayı kontrol ettiğinizi kanıtlayandır.
  4. Desteklenmeyen biçim. Hiç bildirim desteği olmayan bir şey. 500 yerine temiz bir absent beklenir.

Dört sabit de test senaryosunun yanına depoya işlenmeli. Küçükler, asla değişmezler ve geçen bir test ile anlam ifade eden bir test arasındaki farkı yaratırlar.

Neden Uğraşmalı

Size maliyetlerine göre artan sırada üç neden.

Ürün iddia'nız. Eğer kullanıcı arayüzünüz bir menşe rozeti gösteriyorsa ve işlem hattınız bildirimleri kaldırıyorsa, yeniden boyutlandırmadan geçen her varlık için rozet yanlıştır. Bu, bir kullanıcıdan öğreneceğiniz bir güven sorunudur.

Uyumluluk hikayeniz. Madde 50 ile ilgili herhangi bir şey için C2PA'ya güveniyorsanız, sıyrılmış bir bildirim çalışmayan bir kontroldür. API geliştiricileri için AB Yapay Zeka Yasası Madde 50'deki sağlayıcı ve dağıtıcı ayrımı, hangi görevlerin aslında size ait olduğunu açıklar.

Sinyalin kendisi. Menşe, ancak zincir baştan sona tutarlıysa işe yarar. Bildirimleri sessizce düşüren her işlem hattı, tüm ekosistemi daha az kullanışlı hale getirir; bir şeyi doğrulamaya çalışan siz olduğunuzda bile.

Kendi uç noktalarınıza karşı gidiş-dönüş senaryosunu oluşturmak için Apidog'u indirin, ardından c2patool adımını arkasına bağlayın.

Sıkça Sorulan Sorular

Bir görüntüyü yeniden boyutlandırmak C2PA metadata'sını kaldırır mı? Evet, her yaygın kütüphanede varsayılan olarak. Metadata bloğunu korumak açık bir bayrak gerektirir ve geçerli bir imzayı korumak, dönüştürülmüş çıktıyı yeniden imzalamayı gerektirir.

Bir dosyanın C2PA metadata'sına sahip olup olmadığını nasıl kontrol ederim? Komut satırından c2patool <dosya> komutunu çalıştırın veya dosyayı İçerik Kimlik Bilgileri doğrulama sayfasına sürükleyin.

Bir yeniden boyutlandırma yoluyla C2PA metadata'sını koruyabilir miyim? Evet, ancak sadece koruyarak değil. Bloğu koruyun, ardından c2pa kütüphanelerinden birini kullanarak c2pa.resized gibi bir eylem beyanı ile çıktıyı yeniden imzalayın. Aksi takdirde eski imza yeni baytlarla eşleşmeyecektir.

CDN'ler İçerik Kimlik Bilgilerini kaldırır mı? Birçoğu otomatik optimizasyon yaptıklarında kaldırır. Bazıları artık doğal olarak korur ve yeniden imzalar. Kullanıcılarınızın kullandığı teslimat URL'si üzerinden test yapın, başlangıç noktası üzerinden değil.

Sıyırılmış bir bildirim ile geçersiz bir bildirim arasındaki fark nedir? Sıyırılmış, bildirim bulunamadığı anlamına gelir, bu da dosyanın kökeni hakkında hiçbir şey söylemez. Geçersiz, bir bildirimin mevcut olduğu ancak imzasının baytlarla eşleşmediği anlamına gelir, bu da dosyanın imzalandıktan sonra değiştiği anlamına gelir. Bunları ayrı durumlar olarak tutun.

Apidog doğrudan bir C2PA imzasını doğrulayabilir mi? Gidiş-dönüşü düzenler ve bir doğrulama uç noktasının JSON'u da dahil olmak üzere HTTP yanıtları üzerinde onaylamalar yapar. İmza ayrıştırma işi c2patool'un görevidir, bir CI adımı olarak veya kendi hizmetinizde çalıştırılır. Her ikisini birlikte kullanın.

Gizlilik için EXIF'i sıyırmalı ancak C2PA'yı korumalı mıyım? Bu doğru hedeftir ve seçici bir yaklaşım gerektirir. Genel bir -strip her ikisini de kaldırır. Özellikle önemsediğiniz EXIF bloklarını kaldırın ve C2PA bildirimini sağlam bırakın.

Çıkarım

Menşe metadata'sı API'nize sağlam gelir ve genellikle parça parça ayrılır ve izlemenizdeki hiçbir şey size bunu söylemez. Çözüm, bir sabit, gerçek teslimat yolu üzerinden gidiş-dönüş ve derlemeyi başarısız eden bir c2patool kontrolüdür.

Yirmi dakikalık bir kurulum, ve kullanıcı arayüzünüzde yaptığınız bir iddiayı, işlem hattınızın gerçekten uyguladığı bir garantiye dönüştürür.

Düğme

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin