Bununla ilgili yabancı forumlarda güzel anlatımlar vardı, kaba bir çeviriyle ekleyeceğim;
1-GET Değişkenleri URL aracılığıyla işlendiği için sunucu loglarında ve tarayıcı geçmişlerinde kaydedilir, ayrıca URL kısmında yer aldığı için kolaylıkla oynama yapılabilir.
2-POST ile sunucuya kolaylıkla sahte veri gönderilebilir, bu yüzden "halka açık" olarak tabir ettiğimiz üyeli/üyesiz ana sayfalardaki formlarda recaptcha tarzı doğrulama kullanmak farzdır.
3-GET ile ilgili en büyük sorun kötü niyetli kullanıcıların rahatlıkla veri göndermesidir, örneğin "example.com/changepassword.php?newpass=hackedu" - Yeterli güvenliğe sahip olmayan sunucuda bir kullanıcı bu URL'ye girdiğinde şifresi "hackedu"" olacaktır ve kötü niyetli kişi hesabına erişim sağlayacaktır. Bu değişken yolunu bulmanın en kolay yolu da kötü niyetli kişinin "Şifremi Değiştir" sayfasına girip şifresini değiştirmesi olacaktır, gerisini tarayıcının URL kısmından takip edecektir.
4-GET görünür okunur dedik ama POST görünmez okunmaz diyemeyiz, POST verileri de üçüncü şahıslar tarafından izlenebilir bu yüzden HTTPS protokolü mutlaka kullanılmalıdır.
5-Webcrawlerar GET değişkenleri için yüksek risk oluşturmaz fakat Web Accelerator'lar sitenizdeki her yere tıklayarak terör estirirler, eğer bir dosyayı silmek için kullanılan GET değişkenine tıklarlarsa size veri kaybettirirler (Kasıtlı değildir). 2005 yılında insanlar sitelerindeki dosyaların silinmesinden şikayetçiydi, bu olayda
Google'ın Web Accelerator Botu Yakalandı ve suçlu bulundu.
6-GET değişkenleri için doğrudan güvenlik doğrulaması yapamazsınız, ancak POST formunu sunucuya postlamadan önce reCaptcha gibi yazılımlarla güvence altına alabilirsiniz. Bu sayede Confused Depucy ataklarından bir nebze de olsa kurtulursunuz.
7-Kullanıcı, sayfada GET verisi gönderilirken sayfayı sürekli yenileyebilir ancak POST değişkeni post edilirken sayfa yenilendiğinde tarayıcı js alert uyarı verecektir.
SS SORU
S-HTTPS Protokolü kullanıyorum, POST verilerim güvende peki GET verilerim? Sonuçta onlar URL kısmında görünüyor.
C-GET/POST verisi gönderilirken arada varsayılan olarak 2 şahıs vardır, birincisi son kullanıcı ikincisi ise sunucudur, verilerin 3. şahıs kişiler tarafından görüntülenmemesi için HTTPS protokolü ile şifrelenme yapılır, bu şifreleme URL kısmında görünmez fakat sunucu ile client arasındaki iletişimde kendisini gösterir, protokolün asıl amacı da budur yani GET ve POST değişkenlerinde protokolden bir kayıp olmaz. Ancak GET verisi içeren bağlantı kullanıcının tarayıcısındaki "Geçmiş" sekmesinde görünüyor olacaktır.
Sonuç;
İkisinin kullanım alanları değişkenlik gösteriyor, yeri gelir GET kullanırsınız yeri gelir POST kullanırsınız fakat buradan çıkartmanız gereken şey güvenlik gerektiren işlemlerde POST yöntemini kullanmanızdır. Şimdi bu yazılardan sonra GET'e veya POST'a düşman olmayalım, iksinin de işimizi kolaylaştırdığı ve/veya işlem güvenliğini arttırdığı yönleri var.