GET isteği POST talebinden daha az güvenlidir. Her ikisi de tek başına gerçek "güvenlik" sunmaz; POST isteklerini kullanarak olmayacak sihirli web sitenizin farkedilir miktarda zararlı saldırılara karşı güvenli olun. Ancak, GET istekleri kullanarak yapabilirsiniz bir başka güvenli bir uygulama güvensiz olun.
"Değişiklik yapmak için GET isteklerini kullanmamalısınız" mantrası hala çok geçerlidir, ancak bunun kötü niyetli davranışlarla ilgisi yoktur . Giriş formları, yanlış istek türü kullanılarak gönderilmeye en duyarlı formlardır.
Arama örümcekleri ve web hızlandırıcıları
Bu, verileri değiştirmek için POST isteklerini kullanmanızın gerçek nedenidir. Arama örümcekleri web sitenizdeki her bağlantıyı takip eder, ancak buldukları rastgele formları göndermez.
Web hızlandırıcıları, istemcinin makinesinde çalıştıkları ve oturum açmış kullanıcının bağlamındaki tüm bağlantıları "tıklattıkları" için arama örümceklerinden daha kötüdür . Bu nedenle, bir yönetici gerektirse bile bir şeyleri silmek için GET isteğini kullanan bir uygulama, (kötü amaçlı olmayan!) Web hızlandırıcının siparişlerine mutlu bir şekilde itaat eder ve gördüğü her şeyi siler .
Karışık vekil saldırısı
Bir GET veya POST isteği kullansanız da, şaşkın bir yardımcı saldırısı (vekilin tarayıcı olduğu yerde) mümkündür .
Saldırgan tarafından kontrol edilen web sitelerinde GET ve POST, kullanıcı etkileşimi olmadan göndermek de aynı derecede kolaydır .
POST'un biraz daha az duyarlı olduğu tek senaryo, saldırganın kontrolü altında olmayan birçok web sitesinin (örneğin, bir üçüncü taraf forumu) keyfi görüntülerin gömülmesine izin vermesidir (saldırganın keyfi bir GET isteği enjekte etmesine izin verir), ancak tümünü engeller otomatik veya manuel olsun, arbiter bir POST isteği enjekte etmenin yolları.
Web hızlandırıcılarının şaşkın vekil saldırı örneği olduğu söylenebilir, ancak bu sadece bir tanım meselesidir. Bir şey olsa bile, kötü niyetli bir saldırgan bu yüzden pek bir var, bu kontrole sahip saldırı yardımcısı bile edilir karıştı.
Proxy günlükleri
Proxy sunucuları, sorgu dizesini çıkarmadan GET URL'lerini bütünüyle günlüğe kaydedebilir. POST istek parametreleri normalde günlüğe kaydedilmez. Her iki durumda da çerezlerin kaydedilmesi olası değildir. (misal)
Bu POST lehine çok zayıf bir argüman. İlk olarak, şifrelenmemiş trafik bütünüyle kaydedilebilir; Kötü amaçlı bir proxy'de zaten gereken her şey var. İkincisi, istek parametreleri bir saldırgan için sınırlı kullanımlıdır: gerçekten ihtiyaç duydukları çerezlerdir, bu yüzden sahip oldukları tek şey proxy günlükleri ise, bir GET veya POST URL'sine saldırma olasılığı düşüktür.
Giriş istekleri için bir istisna vardır: bunlar kullanıcının şifresini içerir. Bunu proxy günlüğüne kaydetmek POST durumunda olmayan bir saldırı vektörü açar. Ancak, düz HTTP üzerinden giriş yapmak zaten doğal olarak güvensizdir.
Proxy önbelleği
Önbellek proxy'leri GET yanıtlarını koruyabilir, ancak POST yanıtlarını koruyamaz. Bunu söyledikten sonra, GET yanıtları, URL'yi bir POST işleyicisine dönüştürmekten daha az çabayla önbelleğe alınamaz hale getirilebilir.
HTTP "Yönlendiren"
Kullanıcı bir GET isteğine yanıt olarak sunulan sayfadan bir üçüncü taraf web sitesine gidecekse, bu üçüncü taraf web sitesi tüm GET istek parametrelerini görebilir.
Şiddeti bu parametrelerde neyin mevcut olduğuna bağlı olan "üçüncü bir tarafa istek parametrelerini ortaya koyar" kategorisine aittir. POST istekleri bundan doğal olarak etkilenmez, ancak GET isteğinden yararlanmak için bir bilgisayar korsanının sunucunun yanıtına kendi web sitesine bir bağlantı eklemesi gerekir.
Tarayıcı geçmişi
Bu, "proxy günlükleri" bağımsız değişkenine çok benzer: GET istekleri, parametreleriyle birlikte tarayıcı geçmişinde saklanır. Saldırgan, makineye fiziksel erişimi varsa bunları kolayca elde edebilir.
Tarayıcı yenileme işlemi
Kullanıcı "yenile" düğmesine bastığında tarayıcı bir GET isteğini yeniden deneyecek. Kapatma işleminden sonra sekmeleri geri yüklerken bunu yapabilir. Herhangi bir işlem (örneğin bir ödeme) uyarı yapılmadan tekrarlanacaktır.
Tarayıcı bir POST isteğini uyarı yapmadan yeniden denemez.
Bu, verileri değiştirmek için yalnızca POST isteklerini kullanmak için iyi bir nedendir, ancak kötü niyetli davranış ve dolayısıyla güvenlikle ilgisi yoktur.
Peki ne yapmalıyım?
- Verileri değiştirmek için yalnızca güvenlikle ilgili olmayan nedenlerle yalnızca POST isteklerini kullanın.
- Giriş formları için yalnızca POST isteklerini kullanın; aksi takdirde saldırı vektörleri ortaya çıkar.
- Siteniz hassas işlemler yapıyorsa, gerçekten ne yaptıklarını bilen birine ihtiyacınız vardır, çünkü bu tek bir cevapta ele alınamaz. HTTPS, HSTS, CSP, SQL enjeksiyonunu, komut dosyası enjeksiyonunu (XSS) , CSRF'yi ve platformunuza özgü olabilecek bir dizi başka şeyi (çeşitli çerçevelerdeki toplu atama güvenlik açığı gibi) kullanmanız gerekir: ASP.NET MVC , Ruby on Rails , vb.). "Güvenli" (sömürülebilir değil) ve "güvenli değil" arasındaki farkı yaratacak tek bir şey yoktur.
HTTPS üzerinden POST verileri kodlanır, ancak URL'ler bir üçüncü taraf tarafından koklanabilir mi?
Hayır, koklayamazlar. Ancak URL'ler tarayıcı geçmişinde saklanır.
En iyi uygulamanın, hassas verileri POST veya GET'e olası bir şekilde yerleştirmekten kaçınmak ve bunun yerine hassas bilgileri işlemek için sunucu tarafı kodunu kullanmak olduğunu söylemek doğru olur mu?
Ne kadar hassas veya daha spesifik olarak ne şekilde olduğuna bağlıdır. Açıkçası müşteri görecektir. İstemcinin bilgisayarına fiziksel erişimi olan herkes bunu görecektir. İstemci size geri gönderirken kimlik sahtekarlığı yapabilir. Bunlar önemliyse evet, hassas verileri sunucuda saklayın ve ayrılmasına izin vermeyin.