AAlphaBot
Blog

Withdraw-enabled API key'lerini hard-rejecting: technical deep-dive

2026-05-06 · ~7 dakika okuma

Çoğu trading platform'u withdraw izni enabled ile API key'lerini accept'eder. Yellow warning banner gösteriyorlar, "understand ediyorum" type'ı soruyor ve yine de key'i depolayıorlar. Biz yapmıyoruz. API key'iniz withdraw izni varsa, onboarding'de refuse ediyoruz ve asla depolamıyoruz. Bu post niye, nasıl ve alternative gerçekten ne malı açıklamaktadır.

Threat model bir paragrafta

Withdraw-enabled API key tutmak sistem'i ise one credential leak accountunuzı bosalt'ından ise. Leak database breach'den olmak zorunda değildir — compromised employee laptop, misconfigured backup, third-party dependencyde side-channel veya unencrypted log'da process-memory dump olabilir. Hepsi bizi daha büyük şirket'lere olmuş. Durable savunma budur: herkes'in fund'lara key'leri olmayan place'de yaşıyor.

Detect'ın nasıl çalışıyor

User key paste'e sonra ilk authenticated call'da, permission-introspection exchange-specific call ederiz. Çoğu major venue'ler ya expose ediyorlar:

  • Dedicated "query API key info" endpoint return'lar permission set as a structured field, or
  • Account-info endpoint where key'in permission scope response payload'ı bir kısmı include edilir.

Withdraw, internal transfer, sub-account transfer out veya universal transfer out — venue'ler same idea'nın farklı adı — grant'ı flag'ı arıyoruz. Herhangi bir presente varsa, secret'ı immediately memory'de discard ediyoruz, structured error'u UI'ya return ediyoruz ve asla key'i database'e yazıyoruz.

Niye warn yerine hard-reject

Warning'ler clicked through. Biz bu veri'yi yıl'larca multiple product'lar arasında watched. User'ların base rate'ı type'ı "understand etmeyi" hiçbir word yukarısında read etmeden somewhere north'tan 80%'dir. Warning'i 80% user'lar ignore security control'ü değil; bu yüzden liability shield'dir.

Hard rejection'ı opposite'dir. Friction'ı doğru yeri koyuyor: user'u exchange'e geri gidiyor, trade izni sadece new key oluşturuyor, geri dönüyor ve paste'ediyor. Whole loop'u user'a maybe iki dakika malı. Attacker'a — worst-case credential leak scenario'da — account malı.

Warn-instead-of-reject yolu gerçekten ne malı

Warn-and-store pattern'u user-friendly görünsün user ask kadar'dır: worst-case ne gibi? Hostile employee alıyoruz, supply-chain compromise, transitive dependencyde side-channel veya side-scoped log, ve cevap withdraw-enabled key'ler exactly'dır good account'a kötü person ve account'a touch kötü code'tan person'a kötü olduğu gibi.

Hard-reject'ı flip calcula'yı. Worst-case full database compromise, attacker'ın walk altında read+trade key'ler with. Trade-only key'ler zarar edebiliyorlar — position'lar blow, fee'leri churn, dump open position'larını illiquid pair'lere — ama withdraw edemez. Fund'ları exchange'de stay. Bu sıfır risk'i değildir, ama risk başlayıp connect ettiğiniz otomatik trading agent'ı zaman signing place edilir.

Defend edemediğimiz şey

Biz hard rejection'ın complete security posture'ı pretend etmiyoruz. Bu bir control'dür. Full set'i security sayfasında documented: KMS envelope encryption'ı per-user data key'ler, decrypted secret'lar sadece process memory'de ve API call'ı sadece duration'da yaşıyorlar, append-only hash-chained audit log, CI-tested cross-user isolation ve vulnerability disclosure program. Hard-rejecting'i withdraw izni visibility piece'inin most'u — ve easiest one verify yourself, çünkü onboarding'de withdraw-enabled key'i refuse watch'ı real-time'da ediyoruz.