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
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'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 itSunucu 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İlgili rehberler
CORS yanlış yapılandırması: joker ve yansıtma tuzakları
Her origin'e izin ver, her site API'ni okuyabilir.
Production'da ayrıntılı hata sayfaları ve stack trace'ler
Bir stack trace, saldırganlara tam olarak nereye nişan alacaklarını söyler.
Herkese açık GraphQL introspection: neden sorun ve nasıl kapatılır
Tek bir sorgu tüm şemanı döndürür. Production'da kapat.
Açık dizin indeksleri: dosya sunucun her şeyi listelediğinde
İçeriğini listeleyen bir dosya sunucusu, saldırganlara bedava bir envanter sunar.