Web uygulamaları için güvenlik başlıkları: tam kurulum rehberi
Dosya aktarım web uygulamanız için temel güvenlik başlıklarını yapılandırın. Yaygın web saldırılarına karşı CSP, HSTS, X-Frame-Options.
Güvenlik başlıkları, tarayıcılara bir sayfanın davranışını nasıl kısıtlayacağını söyleyen HTTP yanıt alanlarıdır. İstemci taraflı AES-256-GCM şifrelemesi yapan bir dosya aktarım uygulaması için altı başlık en önemlidir: HTTPS'yi zorlamak için Strict-Transport-Security, betik enjeksiyonunu engellemek için Content-Security-Policy, tıklama sahteciliğini önlemek için X-Frame-Options, URL parçası sızıntılarını durdurmak için Referrer-Policy, kullanılmayan tarayıcı API'lerini devre dışı bırakmak için Permissions-Policy ve tarama bağlamını yalıtmak için Cross-Origin-Opener-Policy. Bunları doğru yapılandırdığınızda, tek bir satır JavaScript değiştirmeden pratik istemci taraflı saldırıların yüzde seksenini engellersiniz.
HSTS ve ön yükleme listesi
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload tarayıcılara iki yıl boyunca düz HTTP üzerinden asla bağlanmamalarını söyler. preload yönergesi sizi Chrome'un HSTS ön yükleme listesine (hstspreload.org) başvurma hakkı verir; bu liste tarayıcıyla birlikte gelir — alanınıza ilk istek bile HTTPS üzerinden yapılır ve başlangıçtaki ortadaki adam saldırısı penceresi ortadan kalkar. Başvuru tek yönlüdür; kaldırma işlemi aylarca sürer. Önce birkaç gün max-age=300 ile test edin. HSTS ön yüklemesi olmayan dosya aktarım hizmeti, tek bir DNS ele geçirme saldırısıyla sahte yükleme formu sunma riskiyle karşı karşıyadır.
Gerçekten işe yarayan İçerik Güvenlik Politikası
CSP, dağıtımı en zor ve en değerli başlıktır. Dosya aktarım uygulaması için katı bir politika şöyle görünür: default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; connect-src 'self' https://upload.hexatransfer.com; style-src 'self'; img-src 'self' data:; font-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'. Satır içi betikler yok, wasm dışında eval yok, üçüncü taraf bağlantı yok. Satır içi olay işleyicileri dış dosyalardaki addEventListener çağrılarına taşıyın. 'wasm-unsafe-eval', libsodium.js için gereklidir; onsuz Argon2id örneği oluşturulamaz.
Her pakette Alt Kaynak Bütünlüğü
JavaScript'iniz jsDelivr veya unpkg gibi bir CDN'den yükleniyorsa her betik etiketine integrity="sha384-..." özniteliği ekleyin. Tarayıcı, karması eşleşmeyen betiklerin çalıştırılmasını reddeder — ele geçirilmiş bir CDN, arka kapılı paket sessizce sunamaz. Kendi alanınızdan sunulan kendi barındırılan betikler için SRI daha az kritiktir ama yine de savunulabilirdir. SRI'yı, CSP'nin require-sri-for script style yönergesiyle (Chrome hâlâ destekler, kullanımdan kaldırılmış olsa da) eşleştirin veya derleme ardışık hattıyla zorunlu kılın. HexaTransfer, şüpheci kullanıcıların manuel doğrulama yapabilmesi için sürüm başına karmalar yayımlar.
X-Frame-Options ve frame-ancestors
Tıklama sahteciliği saldırıları, yükleme sayfanızı başka bir sayfa üzerinde saydam bir iframe içine yükler; bu sayede kullanıcıları paylaşmak istemedikleri bir dosyada "gönder"e tıklatır. X-Frame-Options: DENY, tüm çerçevelemeyi engeller; modern muadili Content-Security-Policy: frame-ancestors 'none'dır. Her ikisini birlikte gönderin — eski tarayıcılar yalnızca eski başlığı, yeniler ise CSP'yi tercih eder. Dosya aktarım uygulaması için asla SAMEORIGIN kullanmayın; yükleme arayüzünü başka bir sayfadan çerçevelemenin meşru nedeni yoktur.
Parçalı sızıntıları önlemek için Referrer-Policy
Tarayıcılar, şifre çözme anahtarınızın yaşadığı URL parçalarını (#key=... kısmı) Referer başlıklarından varsayılan olarak çıkarır; ancak yol kısmı hâlâ sızar. Referrer-Policy: no-referrer, tüm referans bilgilerini engeller — dış bağlantılarda Referer başlığı yok, çapraz kaynak sızıntısı yok, harici izleyiciler tarafından URL parmak izi yok. /d/7Kj9xQmN2vP8rBwLsE4fT#k=abc adresindeki indirme sayfası için bu, kullanıcının tıkladığı herhangi bir dış alana kimliğin sızmasını önler. Bunu başlık aracılığıyla site genelinde ayarlayın; bağlantı başına rel="noreferrer"e güvenmeyin.
Derinlemesine savunma için Permissions-Policy
Uygulamanız kamera, mikrofon, coğrafi konum veya USB API'sini kullanmıyorsa bunları açıkça reddedin: Permissions-Policy: camera=(), microphone=(), geolocation=(), usb=(), bluetooth=(), accelerometer=(), magnetometer=(), gyroscope=(), payment=(). CSP'yi atlatıp sızan bir XSS, kullanıcının yüzünü kaydetmek için web kamerasını çalıştıramaz. Bu başlığın dağıtımı kolaydır, dosya aktarım iş akışı için kullanıcı deneyimi üzerinde etkisi yoktur ve SOC 2 denetçileriyle "CSP'niz neden katı değil" konuşmalarında koruduğunuzu düşündüğünüzü gösterir.
Çapraz kaynak yalıtım başlıkları
Yüksek çözünürlüklü zamanlayıcılara ve SharedArrayBuffer'a erişim için (bazı wasm kripto uygulamalarında gerekli) tarayıcılar Cross-Origin-Opener-Policy: same-origin ve Cross-Origin-Embedder-Policy: require-corp aracılığıyla çapraz kaynak yalıtımı gerektirir. Bu başlıklar aynı zamanda bitişik kaynaklardan AES anahtarlarını sızdırabilecek Spectre tarzı yan kanal saldırılarını da önler. Ödün şudur: gömülü üçüncü taraf kaynaklar (YouTube videoları, Stripe ödeme) Cross-Origin-Resource-Policy: cross-origin sunmadıkça çalışmaz. Üçüncü taraf gömülü öğe içermeyen tek amaçlı bir dosya aktarım uygulaması için yalıtım ücretsizdir.
Hassas sayfalar için Cache-Control
İndirme onay sayfası kısa ömürlü bir şifre çözme anahtarı veya oturum simgesi görüntüleyebilir. Önbelleğe almayı önleyin: Cache-Control: no-store, must-revalidate ve Pragma: no-cache. Yalnızca no-cachee güvenmeyin — bu, kaynağa yeniden doğrulamaya izin verir, yani önbelleğe alma yine gerçekleşir. Yükleme sayfasının JavaScript paketi için tam tersi geçerlidir: içerik karmaşalı dosya adlarıyla (/js/main-a7b3c9.js) uzun max-age değeri, geçersiz kılma ek yükü olmadan CDN önbelleğinin çalışmasını sağlar. Başlıkları yol bazında titizlikle uygulayın.
X-Content-Type-Options ve MIME algılama
X-Content-Type-Options: nosniff, tarayıcıların içeriğe göre MIME türlerini tahmin etmesini engeller. Bu olmadan, <script> içeren bir .txt dosyası saldırgan tarafından yüklendiğinde geri sunulduğunda HTML olarak işlenebilir. Kullanıcı kontrolündeki indirmeleri sunan aktarım hizmeti için nosniffi Content-Disposition: attachment; filename="..." ile birleştirin; böylece tarayıcı görüntülemek yerine indirir. Dosya adını yol geçişine karşı (../../../etc/passwd) sunucu tarafında doğrulayın; görüntüleme dışında hiçbir şey için yüklemenin meta verilerine güvenmeyin.
İzleme ve CSP raporları
CSP'yi önce report-only modunda dağıtın, bir hafta boyunca report-uri uç noktasında ihlalleri toplayın, gerçek sorunları düzeltin, ardından zorunlu kılın. Gözlem için Content-Security-Policy-Report-Only, zorunlu kılmak için Content-Security-Policy kullanın. Rapor uç noktası her ihlali JSON POST olarak alır: engellenen URI, ihlal edilen yönerge, kaynak dosya, satır numarası. Report URI gibi hizmetler veya kendi barındırdığınız Sentry bunları toplar. Haftalık gözden geçirin — gerçek saldırılar daha önce hiç görmediğiniz olağandışı engellenen URI'ler olarak görünür.
Çalışmanızı puanlayın
Üretim URL'nizi securityheaders.com ve Mozilla Observatory üzerinden çalıştırın. A veya A+ notu mükemmellik değil ama temel beklentidir. Dosya aktarım rakiplerinin büyük çoğunluğu B veya daha düşük alır; çünkü Permissions-Policyyi unuturlar ya da CSP'de 'unsafe-inline'a izin verirler. Küçük bir hizmet, WeTransfer'ın güvenlik başlığı puanını kolaylıkla geçebilir; başlıklar eklemek maliyetsizdir ve katı başlayarak SOC 2 denetçileriyle "CSP'niz neden katı değil" konuşmalarında haklı çıkmak daha kolaydır.
hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, 10 GB'a kadar.
Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin
Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.
Dosya gönder