AIDive

Kendi sitemde açık bir kapı buldu. İşte düzeltmesi

AIDive tarafından · Yayın

Yapay zekâ güvenliğiKodlama agent'ları

Giriş: önce kendinize çevirin

REA'yı, başkası uygulamanızı parçalarına ayırmadan önce kendi uygulamanıza çevirin. Biz onu kendi canlı sitemize, tek kullanımlık bir bulut sandbox'ından çevirdik, bulduklarını düzelttik ve pull request'i gönderdik.

REA, bir sürü videonun başkasının yazılımına yönelttiği tersine mühendislik skill'idir. Bizim sitemizde, herhangi bir web sitesinin posta listemizi doldurabileceğini göstermek için on üç dakikadan az süre ve tek bir yazma isteği bile gerekmedi. Ayrıca yorum botumuzun günlük sınırını, sitemizden indirilen JavaScript'in içinde duruyor halde buldu. Düzeltmeden sonra, eskiden içeri sızan istek artık reddediliyor.

Sonuç, aynı denetimi kendi uygulamanızda yapmanız için altı kural: tek kullanımlık sandbox, tam hedef, bulguları ayıklama, bundle'ınızdaki config, uç noktalardaki frenler ve düzeltmeyi kanıtlama.

REA nedir ve nasıl kurulur

REA, Reverse Engineer Anything anlamına gelir: Claude Code'un yayına verdiğiniz uygulamayı parçalarına ayırmasını sağlayan bir araç takımı. Tersine mühendislik, bir şeyin nasıl yapıldığını bitmiş üründen çözmektir; tıpkı bir tamircinin fabrika çizimleri olmadan bir arabayı okuması gibi.

REA, kaynak kodunuzu okumak yerine bundle'ı okur; yani sitenizin her ziyaretçiye gerçekten gönderdiği JavaScript'i. Bu bundle'dan rotaları, sayfalarınızın çağırdığı uç noktaları ve yanlışlıkla içeride bıraktığınız her şeyi listeler. Kaynak kodunu size geri veremez, çünkü elinize yalnızca kanıt geçer ve kendi dokümanları da onun bir sandbox olmadığını söyler.

Kurmak için:

  1. REA'yı resmi paketinden kurun ve sürümü sabitleyin, çünkü bir haftada altı sürüm yayımladı.
  2. Claude Code için kurulumunu çalıştırın.
  3. Kompakt profili açın, çünkü oturumunuza yüzün çok üzerinde araç yükler.
  4. Yalnızca resmi repodan kurun, çünkü içinde kötü amaçlı yazılım bulunan sahte kopyalar şimdiden dolaşıma girdi.

Kurulumu sandbox'ımızda yaptığımızda, ajan herhangi bir şeye dokunmadan önce paketin resmi repoya işaret ettiğini kontrol etti. Kurulum skill'i yükledi ama bir araç sunucusu yüklemedi, bu yüzden Claude Code aynı araçların REA'nın komut satırı sürümlerini kullandı. Kurulumdan sonra araçlarınız görünmezse hiçbir şeyi yeniden başlatmanız gerekmez: aynı adımları terminalden çağırın.

Kural 1: zarar veremeyeceği yerde çalıştırın

İlk kural nerede çalıştıracağınızla ilgili. Bir ajanın tarayıcıyı sürmesine ve indirilen araçları canlı uygulamanıza karşı çalıştırmasına izin vermek üzeresiniz. Dizüstü bilgisayarınızda bu ajan anahtarlarınızın, diğer projelerinizin ve oturum açtığınız her hesabın yanında durur. REA'nın kendi güvenlik notları bunu açıkça söyler: bu bir sandbox değildir.

Sandbox, tek kullanımlık bir makinedir; ne ters giderse içeride kalır ve siz onu silersiniz. Reponuzda tek kullanımlık bir sandbox açın ve denetimin tamamını orada yapın, asla kendi makinenizde değil.

Biz, Claude Code'u kendi aboneliğinizle tek kullanımlık bir bulut makinesinin içinde çalıştıran Kosuke'yi kullandık. Reponuzu seçersiniz, deploy ajanına uygulamanızın nasıl başladığını söylersiniz ve size bir önizleme verir; çalışan uygulamanızın göründüğü bir bağlantı. Her sohbetin ayrıca kendi branch'i, yani kodun kendi kopyası vardır ve bir pull request ile biter. Sitemizi içe aktardığımızda ajan paket yöneticisini ve headless bir tarayıcıyı kurdu, belleği ölçtü ve makine boyutunu kendi başına seçti. Birkaç dakika sonra gerçek sitemiz sohbetin yanında, kimsenin dokunmadığı bir branch üzerinde çalışıyordu.

Daha önceki bir testten bir tuzak: yeni bir Next.js uygulaması önizlemede göründü ama sayfadaki hiçbir şey yanıt vermedi. Çözüm, Next config'inizde önizlemenin adresine izin veren tek bir satırdır ve sayfa canlanır.

Sınır şu: bu, etrafına bir kutu çekilmiş aynı Claude Code, dolayısıyla yerel bir sanal makine ya da bir konteyner aynı işi görür. Önemli olan kutudur, marka değil.

Açıklama: Kosuke bize en üst planına ücretsiz erişim verdi. Kayıttan hemen sonra "Promo code" alanına AIDIVE2026 kodunu girin, her zamanki on dolar yerine otuz dolarlık kredi alın.

Kural 2: tek bir tam URL, her yazma isteği engelli

İkinci kural, REA'ya gerçekte ne söylediğinizdir. Sadece "uygulamamı denetle" derseniz, REA'nın skill'i durur ve hangi uygulama olduğunu sorar.

REA ayrıca tarayıcıyı asla kendi başına açmaz, bu yüzden onu bir hata ayıklama portuyla başlatırsınız; bir aracın sayfanın yaptığı her şeyi izlemesini sağlayan bir kapı. Şu sırayla kurun:

  1. Hata ayıklama portunu loopback üzerinde tutun, yani yalnızca kendi makinenizin erişebildiği adreste, ve tarayıcıya temiz bir profil verin.
  2. Hiçbir sayfa yüklenmeden önce her yazma isteğini engelleyin, böylece denetim sitenizi okuyabilsin ama bir form gönderemesin ya da hiçbir şeyi değiştiremesin.
  3. Ancak ondan sonra REA'ya okumasını istediğiniz tam sayfaları verin.

Prompt'umuzda ücretsiz kulübümüzün iki sayfasını adlandırdık ve düz sözlerle tek bir kural yazdık: canlı siteye asla yazma isteği gönderme. Bu önemliydi, çünkü o sayfalardaki form gerçek insanların bulunduğu gerçek bir posta listesini besliyor. Ajan kuralı ciddiye aldı ve okumalara izin verip geri kalan her şeyi durduran küçük bir koruma yazdı. Denetim sırasında bu koruma analitik script'inden gelen altı denemeyi durdurdu ve tek bir istek bile kayıt formumuza ulaşmadı.

REA sonra kendi işini yaptı: her sayfayı inceledi, her bundle'ı okudu, ekran görüntüleri aldı ve script'leri repo dışına aktardı.

Sınır şu: REA yalnızca bağlıyken yüklenenleri izler, bu yüzden daha önce olan her şey raporda bilinmeyen olarak kalır. Yine de artık canlı uygulamanız hakkında, tek bir verisine dokunmadan yazılmış bir raporunuz var.

Kural 3: bir tanesini düzeltmeden önce her bulguyu ayıklayın

Üçüncü kural, düzeltmeden önce ayıklamaktır. Böyle bir rapor ürkütücü satırlarla doludur ve hepsini bir anda düzeltmek istersiniz.

REA'nın kendi skill'i, her sonucun bir kanıt kimliğiyle birlikte gözlem, çıkarım ya da bilinmeyen olarak işaretlenmesini ister. Yani gördüğünü, tahmin ettiğini ve göremediğini; kanıt kimliği ise kontrol edebileceğiniz bir makbuzdur. Önce her bulguyu bu şekilde, yalnızca dışarıdan birinin bakışıyla ayıklayın ve tek bir kaynak dosyası açmadan önce bu sürümü commit'leyin. Sonra kaynağınızı okuyun ve her satırı gerçek bir sızıntı, tasarım gereği ya da yanlış alarm olarak işaretleyin.

Raporumuzda on beş bulgu vardı:

Bulgu REA'nın gördüğü Bizim kararımız
Kayıt uç noktası Ne bir sınır ne de çağıran sitenin kontrolü vardı, bu yüzden herhangi bir site bir ziyaretçinin tarayıcısına herhangi bir adresi listemize abone ettirebilirdi Gerçek sızıntı, en kötüsü
Ücretsiz paketlerdeki e-posta kapısı Paketin tamamı yüklediğiniz sayfanın içinde zaten duruyor; tarayıcı konsolunda tek bir satır kapıyı kaldırıyor, okuyucu modu da metni gösteriyor Tasarım gereği
Source map'ler, anahtarlar, cookie'ler Bundle'larda hiçbiri yok, hiçbir yerde cookie yok İyi haber

Kapı tasarım gereğidir, çünkü paketler bilerek ücretsiz ve kendi kodumuz bozuk bir formun ücretsiz bir sayfayı asla gizlememesi gerektiğini söylüyor.

Sınır, bilinmeyen sütunudur. REA sunucunuzun ne yaptığını göremez, bu yüzden o satırları sunucu kodunuzu okuyarak çözersiniz.

Kural 4: bundle'ınız config'inizi gönderiyor

Dördüncü kural bundle'ınızın taşıdıklarıyla ilgili, çünkü paylaşılan tek bir ayar dosyası siz fark etmeden her ziyaretçiye gidebilir.

Bu şöyle olur. Config'inizi tek bir yardımcıda içe aktarırsınız ve iki küçük etkileşimli bileşen bu yardımcıyı kullanır. Kodunuzu tarayıcının indirdiği dosyalara paketleyen araç olan bundler, hangi anahtarlara ihtiyaç duyduklarını ayırt edemez ve hepsini gönderir.

REA, JavaScript'imizde tam olarak bunu buldu. Tüm site config'imiz tek bir dosyada duruyordu: posta listemizin kimliği, build klasörlerimiz ve videolarımızdaki yorumlara cevap veren botun sınırları. Bu botun günde kaç cevap gönderdiğini, yüz, ve kaç hatanın güvenlik şalterini attırdığını bile söylüyordu. Onu içeri çeken iki bileşen yalnızca site adını ve dil listesini okuyordu.

Kural: gönderilen JavaScript'inizde kendi config anahtarlarınızı arayın ve istemci bileşenlerine yalnızca okudukları alanları verin. Sandbox'ımızda ajan config'i yalnızca bu alanları içeren küçük bir tarayıcı sürümüne böldü ve geri kalanı sunucuda kaldı. Ayrıca, bir sunucu anahtarı gönderilen bir dosyada yeniden belirirse başarısız olan bir build adımı ekledi, böylece geri kayamazsınız.

Bunların hiçbiri parola değildi, ama o dosyadaki her şey herkese açıktır, bu yüzden sırlarınız yalnızca sunucu değişkenlerinde yaşar.

Kural 5: her açık uç noktaya bir fren

Beşinci kural gerçek sızıntımızı düzeltti ve ücretli bir servisi çağıran herkese açık bir formunuz olduğunda geçerlidir: e-posta listeniz, yapay zeka modeliniz ya da kısa mesaj geçidiniz. Onu bir öğleden sonrada yazdığınız küçük bir sunucu fonksiyonuyla çağırırsınız. Bizimki bir e-posta alıp doğrudan posta listesine iletiyordu ve başka herhangi bir web sitesi bir ziyaretçinin tarayıcısına ona bir tane gönderttirebilirdi.

Güvenlik dünyasının kendi kontrol listesi bunu açıkça söyler: erişim denetiminiz yalnızca saldırganın değiştiremeyeceği kodda işe yarar, yani sunucunuzda. Bu yüzden böyle her uç noktaya frenler koyun:

  • Origin kontrolü. Origin başlığı, bir tarayıcının isteğin hangi siteden geldiğini söylemek için isteğe vurduğu damgadır, böylece başka bir web sitesindeki bir form reddedilir.
  • Rate limit. Bir ziyaretçinin kısa bir süre içinde gönderebileceği istek sayısına konan bir üst sınır.
  • Sunucuda kontrol edilen izin. İşaretlediğiniz kutu isteğle birlikte gerçekten yolculuk eder.

Sandbox'ımızda ajan hepsini Worker'ımıza yazdı; sayfalarınızı ziyaret ettiğinizde sayfaların önünde çalışan küçük fonksiyona. Sonra onları sahte bir posta servisine karşı test etti, asla gerçeğine karşı değil, ve her istek tam olması gereken yerde reddedildi. Yanlış siteden gönderirseniz reddedilirsiniz. Dakikadaki altıncı isteğiniz de reddedilir ve izin olmadan geri çevrilirsiniz.

Sınır şu: bir script Origin damgasını taklit edebilir ve rate limit konum başına sayar, bu yüzden bunun asıl çözümü e-posta ile çift onaydır.

Kural 6: yeniden çalıştırın, elle kontrol edin, PR'ı gönderin

Altıncı ve son kural, düzeltmeyi kanıtlamaktır, çünkü yeşil onay işaretlerinden oluşan bir duvar tam da bakmayı bıraktığınız andır. REA'yı bir masaüstü uygulamasında test eden bir geliştirici, HackerNoon'da onun uygulamanın gerçekten sahip olduğu giriş noktalarını kaçırdığını yazdı.

Bu yüzden düzeltilmiş build üzerinde aynı REA adımlarını yeniden çalıştırın, her düzeltmeyi terminalden elle kontrol edin ve ancak ondan sonra pull request'i açın.

Düzeltilmiş build'de, kayıt formumuzdan eskiden sızan istek reddediliyor. Sunucu anahtarlarımız gönderilen hiçbir dosyada yoktu, güvenlik başlıkları yerindeydi ve Worker testleri başarısızlıktan geçişe döndü. Ücretsiz paketlerimizdeki kapı hâlâ açıktı, ki bunu biz karar verdik, ve rapor bunu her satırın yanında söylüyor.

Ajan sonra pull request'i açtı. Raporlar onun içinde yalnızca prompt'ta istediğimiz için var. Kosuke'nin oluşturduğu test kontrol listesi oturumun içinde kaldı, pull request'in kendisine hiçbir şey yazılmadı. İncelemeciniz yalnızca GitHub okuyorsa, önce ve sonra raporlarını pull request'e kendiniz koyun.

Sonra aynı değişikliği kendi kodumuza aldık ve sitemizin bir sonraki deploy'uyla yayına girecek.

Karar: REA'yı ne zaman kendinize çevirmeli

Bütün çalıştırma şuydu: REA, kendi canlı sitemize tek kullanımlık bir sandbox'tan çevrildi, her bulgu ayıklandı, gerçek sızıntılar düzeltildi, yeniden denetlendi ve pull request olarak gönderildi. Hepsini haklı çıkaran bulgu ilkiydi: herhangi bir web sitesi kayıt formumuzu herkesin adresiyle doldurabilirdi.

Herkese açık bir formu ya da arkasında ücretli bir servis olan herhangi bir şeyi yayına almadan önce bu denetimi çalıştırın ve yayına verdiğiniz şeyi değiştirdiğinizde yeniden çalıştırın. Sahibi olmadığınız yazılımda çalıştırmayın, çünkü REA'nın kendi uyarısı onu sahibi olduğunuz ya da incelemeye yetkili olduğunuz yazılımla sınırlar. Ve sunucu kodunuzu okumanın yerini asla tutmaz, çünkü bilinmeyenler tam orada yaşıyor.

Tek bir kuralı akılda tutacaksanız şunu tutun: kendinizde çalıştırın, bir kutunun içinde, ve yalnızca ayıkladığınızı düzeltin.

Tam prompt'lar, ayıklama tablosu ve yayınladığımız Worker düzeltmesi bu videonun ücretsiz kitinde.

Ücretsiz kaynaklar

Kaynaklar

Sık sorulan sorular

REA (Reverse Engineer Anything) nedir?
REA, Claude Code'un yayına verdiğiniz uygulamayı parçalarına ayırmasını sağlayan bir araç takımı ve skill'dir. Sitenizin ziyaretçilere gönderdiği JavaScript bundle'ını okur ve rotaları, uç noktaları ve yanlışlıkla içeride bırakılan her şeyi listeler; size kaynak kodunu değil kanıt verir.
REA'yı kendi sitemde çalıştırmak güvenli mi?
Yalnızca tek kullanımlık bir sandbox'ın içinde, çünkü REA'nın kendi güvenlik notları bunun bir sandbox olmadığını söyler. Tek kullanımlık bir bulut makinesi, yerel bir sanal makine ya da bir konteyner kullanın, tarayıcı hata ayıklama portunu loopback üzerinde tutun ve hiçbir sayfa yüklenmeden önce her yazma isteğini engelleyin.
REA'yı Claude Code için nasıl kurarım?
Resmi paketinden kurun ve bir haftada altı sürüm yayımladığı için sürümü sabitleyin, sonra Claude Code için kurulumunu çalıştırın ve yüzün çok üzerinde araç yüklediği için kompakt profili açın. Yalnızca resmi repoyu kullanın, çünkü kötü amaçlı yazılım içeren sahte kopyalar dolaşıma girdi.
REA gerçek bir canlı sitede ne buldu?
Bizim sitemizde on beş bulgu çıkardı. En kötüsü, ne bir sınırı ne de çağıran sitenin kontrolü olan bir kayıt uç noktasıydı; bu yüzden herhangi bir site bir tarayıcıya herhangi bir adresi posta listesine abone ettirebilirdi. Ayrıca yorum botunun günlük yüz cevaplık sınırı dahil paylaşılan bir config dosyasının JavaScript içinde gönderildiğini buldu.
Ücretli bir servisi çağıran herkese açık bir formu nasıl korurum?
Uç noktaya üç fren koyun: bir Origin başlığı kontrolü, bir rate limit ve sunucuda doğrulanan izin. Bir script yine de Origin damgasını taklit edebilir ve rate limit konum başına sayar, bu yüzden e-posta ile çift onay daha güçlü çözümdür.
REA'yı sahibi olmadığım yazılımda kullanabilir miyim?
Hayır. REA'nın kendi uyarısı onu sahibi olduğunuz ya da incelemeye yetkili olduğunuz yazılımla sınırlar. Ayrıca sunucu kodunuzu okumanın yerini tutmaz, çünkü raporundaki bilinmeyenler orada yaşar.

İlgili videolar