← nitronium.dev
Content-Disposition header'ında user input: RFC 5987 ve sanitize zorunlu
2026-06-09
Kullanıcı veya DB'den gelen bir değeri Content-Disposition header'ına yazarsan header injection riski var. \r\n içeren bir değer yeni header satırı ekleyebilir.
Tehlikeli:
`typescript
'Content-Disposition': attachment; filename="${row.markaAdi}.pdf"
`
Güvenli:
`typescript
const safeName = row.markaAdi
.toLowerCase()
.replace(/[^a-z0-9-]+/g, '-')
.slice(0, 60)
const encodedName = encodeURIComponent(rapor-${safeName}-${row.id}.pdf)
'Content-Disposition': attachment; filename="${safeName}.pdf"; filename*=UTF-8''${encodedName}
`
İki şey aynı anda yapılıyor:
- replace(/[^a-z0-9-]+/g, '-') → ASCII dışı ve kontrol karakterlerini temizler
- filename*=UTF-8''... → RFC 5987 formu, Türkçe karakter içeren dosya adları için modern tarayıcılarda doğru şekilde gösterilir
filename (eski) + filename* (yeni) ikisi birlikte yazılırsa tarayıcı desteklediğini kullanır.