Tüm rehberler
Orta önem derecesiHTTP Protokolü ve Sunucu Tarafı İstekler

Tehlikeli HTTP yöntemleri: TRACE, PUT ve DELETE nasıl duyurulur

HTTP sunucuları, OPTIONS isteğine yanıt vererek destekledikleri yöntemleri duyurabilir. Bu liste üretimde gerekli olmayan tehlikeli yöntemleri içerdiğinde — TRACE, PUT, DELETE, PATCH veya CONNECT — saldırganlara olası giriş noktalarının haritasını vermiş olursunuz. AppSafe sitenizin kök URL'sine bir OPTIONS isteği gönderir ve Allow ya da Access-Control-Allow-Methods başlıklarında bulduğu tehlikeli yöntemleri işaretler.

Nedir

Her HTTP sunucusu, kabul ettiği yöntemleri listeleyen bir Allow başlığıyla OPTIONS isteğine yanıt verebilir: GET, POST, HEAD, OPTIONS ve desteklediği her şey. Bazı çerçeveler ve ters proxy'ler aynı yanıta Access-Control-Allow-Methods ekler. Hiçbir başlık zorunlu değildir ancak mevcut olduğunda herhangi bir çağırıcıya tam olarak hangi fiilleri denemesi gerektiğini söyler.

AppSafe, origin'inize bir OPTIONS isteği gönderir ve her iki başlıkta kısa tehlike listesindeki yöntemleri arar: TRACE, PUT, PATCH, DELETE ve CONNECT. TRACE, yüksek önem dereceli kendi bulgusunu alır; diğerleri orta önem derecesinde birlikte gruplandırılır. Kontrol yalnızca duyuru ile ilgilidir — Allow'da listelenen bir yöntem sunucunuzda bir şey yapabilir veya yapmayabilir, ancak listelemek keşfi teşvik eder.

Neden önemli

TRACE en ciddi olanıdır. Tüm başlıklar dahil olmak üzere tam isteği çağırıcıya geri yansıtır. Kimlik bilgilerinin veya oturum tanımlama bilgilerinin istek başlıkları olarak iletildiği ortamlarda bu yankı, söz konusu değerleri siteler arası izleme (XST) aracılığıyla sayfadaki bir komut dosyasına açığa çıkarabilir. Modern tarayıcılar TRACE'i XHR/fetch'ten engeller, ancak proxy'ler ve yük dengeleyiciler engellemeyebilir. TRACE'in üretimde meşru bir kullanımı yoktur: tamamen devre dışı bırakın.

PUT, DELETE, PATCH ve CONNECT önemlidir çünkü bunları duyurmak test yapmayı davet eder. Yazılabilir bir yola giden PUT, sunucuya keyfi dosyalar yerleştirebilir — WebDAV sunucuları klasik örnektir. Kimlik doğrulama olmadan DELETE, bir çağırıcının kaynakları kaldırmasına izin verebilir. Bu yöntemler uygulamanızın yetkilendirme mantığından geçip tamamen güvenli olsa bile Allow başlığında bulundurmak saldırganın test listesini daraltır.

Nasıl düzeltilir

nginx'te TRACE'i devre dışı bırakın ve yöntemleri kısıtlayın

TRACE'i server bloğu düzeyinde engelleyin ve uygulamanızın gerçekten kullandığı kısa liste dışındaki tüm yöntemler için 405 döndürün.

server {
  # Reject TRACE completely
  if ($request_method = TRACE) {
    return 405;
  }

  location / {
    limit_except GET HEAD POST OPTIONS {
      deny all;
    }
    # ... your proxy_pass or root ...
  }
}
Express / Next.js'te yöntemleri kısıtlayın

Express'te izin listesi dışındaki tüm yöntemleri reddeden bir middleware ekleyin. Next.js Route Handler'larında yalnızca işlediğiniz yöntemler için işlevleri dışa aktarın — çerçeve diğerleri için otomatik olarak 405 döner.

// Express: block anything outside the allowlist early
import express from "express";
const app = express();

app.use((req, res, next) => {
  const allowed = new Set(["GET", "HEAD", "POST", "OPTIONS"]);
  if (!allowed.has(req.method)) {
    res.set("Allow", [...allowed].join(", "));
    return res.status(405).json({ error: "Method Not Allowed" });
  }
  next();
});

// Next.js Route Handler — only exported functions are reachable
// (no DELETE export → Next.js returns 405 automatically)
export async function GET(request: Request) {
  return Response.json({ ok: true });
}
// export async function DELETE(...) — don't export this unless you need it
Değişiklikten sonra OPTIONS isteğiyle doğrulayın

Sunucu güncellendikten sonra Allow başlığının artık tehlikeli yöntemleri listelemediğini onaylayın.

curl -sI -X OPTIONS https://example.com/ | grep -i allow
# Expected: Allow: GET, HEAD, POST, OPTIONS
# If TRACE, PUT, DELETE, PATCH, or CONNECT appear, the restriction didn't land.

SSS

TRACE engellenmiş olsa bile neden AppSafe onu işaretliyor?

AppSafe, bir OPTIONS yanıtından Allow başlığını okur — sunucunun gerçekten neyi çalıştırdığını değil, ne duyurduğunu işaretler. Bir sunucu, Allow başlığında TRACE desteğini talep ederken yöntemi bir güvenlik duvarı kuralının arkasında engelleyebilir. Allow başlığından TRACE'i kaldırmak doğru düzeltmedir çünkü başlığın kendisi saldırganların okuduğu sinyaldir.

Allow başlığında PUT'u duyurmak sunucumun dosya yüklemeye açık olduğu anlamına mı gelir?

Mutlaka değil — PUT kimlik doğrulama gerektirebilir, onu reddeden bir handler'a yönlendirilebilir veya hiçbir şey yapmayabilir. Risk, test yapmayı davet etmesidir. Uygulamanız kimliği doğrulanmamış çağırıcılardan PUT'a hiç ihtiyaç duymuyorsa, saldırganların var olmayabilecek bir zayıflığı araştırmak için zaman harcamaması için Allow yanıtından kaldırın.

AppSafe bunu nasıl tespit eder?

AppSafe sitenizin kök URL'sine bir HTTP OPTIONS isteği gönderir ve Allow ile Access-Control-Allow-Methods yanıt başlıklarını okur. TRACE, PUT, PATCH, DELETE veya CONNECT görünürse bulgu raporlanır. TRACE yüksek önem derecesinde; diğerleri orta önem derecesinde işaretlenir.

Uygulaman etkileniyor mu?

AppSafe, bunu ve onlarca başka sorunu tek bir ücretsiz taramada kontrol eder.

Uygulamamı ücretsiz tara