GEt ile POST arasındaki fark nedir tam olarak?

Başlatan mesuutt, 15 Haziran 2010 - 13:07:58

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mesuutt

merhaba arkadaslar
Garip bir soru olabilir size göre sitelere bakıyorum hep Get methoduyla gönderdiğimizde bilgilerin adres çubugunda  gösterdiği post methoduyla gonderdiğimizde  göstermediği ve Post'un daha güvenli oldugu yönunde.
Bunun tek sebebi bu olamaz bana göre çünkü bazı sitelere bakıyorum adamlar get ile gönderiyo.veyada ben öle zannediyom örneğin adres çubugunda uyeler.php yazmıyoda acayip acayip  yazılar cıkıyo bence onların post methodunu bilmediğnden falan kaynaklanmıyor.bir bildikleri odugu için ole yapıyolar .Neden ole yaptıklarını Öğrenmek istiyorum.Bu methodun başka sağlam yönleri falan mı var acaba.?

Bilen bir arkadaş bize yardım ederse Cok memnun olurum.
--> [ mesuutt  ] <--

alquirel

denildiği gibi get metoduyla gönderilen veriler adres çubuğunda gösterilir, post ile gönderilenler ise gizli kalır
yani tarayıcı geçmişinde post ile gönderdiğin bilgiler gözükmez.
bu özellikle de şifre içeren formların gönderiminde önemlidir. tarayıcı geçmişinde, adres çubuğunda giriş yaptığın bir sitenin adresleri gözükürken senin şifrenin gözükmesi hoş olmaz değil mi?

ayrıca muhtemelen üye girişlerde senin gördüğün o acayip yazılar PHPSESSID denilen php oturum kimliğidir (yani php session id)
PHPSESSID nin adres çubuğunda görülmesi herhangi bir güvenlik açığına yol açmaz aksine oturumların daha güvenli hale gelmesini sağlar. çünkü her oturumda değişir.

umarım aydınlatıcı olabilmişimdir.

utdmr

Aynı zamanda GET'in şöyle bir avantajı var, doğrudan erişilebilir. Sık kullanılanlara ekleyebilirsiniz ve de bir scriptten GET isteği yapmak daha kolaydır.

Ve de geliştiriciler için, program geliştirmeyi kolaylaştırır, çünkü veriler arasındaki veriler görünür kolaylıkla, gerçi sonradan kolaylıkla POST'a da çevrilebilir, o ayrı mesele.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

vampire

Alıntı yapılan: alquirel - 15 Haziran 2010 - 13:13:52
PHPSESSID nin adres çubuğunda görülmesi herhangi bir güvenlik açığına yol açmaz aksine oturumların daha güvenli hale gelmesini sağlar. çünkü her oturumda değişir.

ne güvenli nede güvensiz hale getirir . bu hatalı bir tanım . herhangi bir değişkenin adres satırından gönderilmesi veyahut gönderilmemesi tamamiyle yapısal bir durumdur hiç bir şekilde güvenliği etkilemez çünkü güvenlik farklı bir durum .

get metodu ile sınırlı byte aktarımı yapabilirsiniz . post metodunda ise genel itibar ile sınırsız veri aktarımı yapabilirsiniz . buradaki sınırsız kavramı server ile alakalıdır . ancak get tamamiyle protokol ile alakalıdır .
Ya Herşeyim Ya Hiçim !!!

alquirel

Alıntı yapılan: vampire - 11 Temmuz 2010 - 03:25:20
Alıntı yapılan: alquirel - 15 Haziran 2010 - 13:13:52
PHPSESSID nin adres çubuğunda görülmesi herhangi bir güvenlik açığına yol açmaz aksine oturumların daha güvenli hale gelmesini sağlar. çünkü her oturumda değişir.

ne güvenli nede güvensiz hale getirir . bu hatalı bir tanım . herhangi bir değişkenin adres satırından gönderilmesi veyahut gönderilmemesi tamamiyle yapısal bir durumdur hiç bir şekilde güvenliği etkilemez çünkü güvenlik farklı bir durum .

get metodu ile sınırlı byte aktarımı yapabilirsiniz . post metodunda ise genel itibar ile sınırsız veri aktarımı yapabilirsiniz . buradaki sınırsız kavramı server ile alakalıdır . ancak get tamamiyle protokol ile alakalıdır .


bence hatalı bir tanım değil, phpsessid kullanmak elbette güvenlik ile ilgili bir konudur ancak şuan web programcılığı güvenliği konusunda kullanılan yöntemlerin yanında çok çocuksu kalır. adres satırından gönderilen veriler, arkaplanda gerekli güvenlik açıklarını kapattıktan sonra ancak güvenlik ile ilgisiz hale gelir.

umithaz

@alquirel haklı.GET metodunun güven problemini basit bir örnek ile anlatacak olursam;bir yıl kadar önce mysql kullanmak yerine .ini formatını kullanan bir sistem görmüştüm.Dosya fonksiyonları kullanarak gidip kullaniciadiniz.ini şeklinde dosyayı açıyor şifreyi alıyordu ve .ini dosyaları içerisinde Admin,Level vs. gibi bilgiler bulunuyordu.Adres satırından direkt olarak kendi ini dosyama gittim,şifreleri gördüm.Bu şekilde herkesin şifresini görebildim.Buraya kadar get ile ilgili bir konu yok.Ancak dava şuradan başlıyor.Dosyayı açtığımda şu şekilde bir görüntü vardı;

Pass=1234
AdminLevel=0
Level=15
Job=1
Bla
Bla

Bunlar çeşitli değerler.Kullanıcı paneline giriş yaparak kendi hesabımın şifresini değiştiriyordum ki get kullanıldığını gördüm ve adres satırına "\n" eklemesi yaparak AdminLevel satırını =1 haline getirdim ;) Bu anlattığım olay bir oyun panelinde gerçekleşmişti.GET ile giden veriler çok can yakıcı olabilir.

Yine aynı şekilde birgün facebook'da dolaşırken GET kullanılarak bir hata sayfası yaratıldığını gördüm.Linkteki yazı alanını silip değiştirdiğinizde facebook şablonuna istediğiniz yazıyı yazdırabiliyordunuz.Sonra sayfayı kapattılar,ayrı konu.Bunları daha basit ve anlaşılır olsun diye anlatıyorum.Soru aralarındaki fark değil,ne zaman get ne zaman post kullanılmalı şeklinde olmalı bana göre.

@mesuutt;

GET kullananlar bir şey biliyorlardır evet.Normalde get ile veri alıyorken "uyeler.php?sifre=2352561" gibi olur adres satırı.Peki get ile gelen veri ne (string vs integer) ? PHP ile gelen veriyi kontrol eden fonksiyonlarla arka planda güvenliği ele alabilirsiniz.Ancak php'yi iyi bilmeyenlerin hiç bulaşmaması gereken bir konu bana göre.

canosayan

get'in bir de şöyle bir dezavantajı var tabiki.
dediğimiz gibi bir get adresi çok kolay bookmark olarak eklenebilir. mesela diyelim ki ubuntu-tr forum girişinde get ile veri alıyordu. sizde bir internet kafede giriş yaparken, -tr.net?kullanici=isim&sifre=sifre gibi bir bağlantı ile giriş yaptınız. doğal olarak bu adres tarayıcının geçmiş verilerine eklendi.

Sizden sonra gelen biri eğer geçmişi biraz kurcalarsa sizin adınıza işlem yapması çok kolay. çünkü zaten şifreniz adres satırında.

Bir diğer fark ise get ile gönderebileceğiniz verinin kısıtlı olması.

zaten genel olarak veri girişleri post ile yapılırken, sayfa yönlendirmeleri get ile yapılıyor.
Chmod bizim işimiz.

demirhan

Get ile ilgili geçmişe eklenen verilerin sorun çıkarmaması için veriler gönderilmeden önce md5() te geçirilir. [En sık kullanılan çözüm yolu budur] Böylece
?kuladi=demirhan&sifre=12345
diye gözükmezde
?kuladi=6c06f3c4e367cfe95abb666265df78a8&sifre=8cfa2282b17de0a598c010f5f0109e7d gibi gözükür :)

andirinli

Alıntı yapılan: vampire - 11 Temmuz 2010 - 03:25:20
Alıntı yapılan: alquirel - 15 Haziran 2010 - 13:13:52
PHPSESSID nin adres çubuğunda görülmesi herhangi bir güvenlik açığına yol açmaz aksine oturumların daha güvenli hale gelmesini sağlar. çünkü her oturumda değişir.
ne güvenli nede güvensiz hale getirir . bu hatalı bir tanım . herhangi bir değişkenin adres satırından gönderilmesi veyahut gönderilmemesi tamamiyle yapısal bir durumdur hiç bir şekilde güvenliği etkilemez çünkü güvenlik farklı bir durum .
get metodu ile sınırlı byte aktarımı yapabilirsiniz . post metodunda ise genel itibar ile sınırsız veri aktarımı yapabilirsiniz . buradaki sınırsız kavramı server ile alakalıdır . ancak get tamamiyle protokol ile alakalıdır .

@vampire kısa bir açıklama geçmiş. Konu iyice sapmadan devamını ben getireyim.
faklılıklar
1- GET istemci tarafında, POST  sunucu tarafında işlem yapar.
2- GET sunucunun HTTP üstbilgi limiti olarak belirlediği miktar kadar aktarım yapar (yanlış hatırlamıyorsam varsayılan 512 byte), POST üstbilgi limiti ile sınırlandırılmaz. (onun sınırlandırılması php.ini deki post_max_size ile ayarlanıyordu diye hatırlıyorum.)
3- GET sunucuya daha az bellek yükü bindirir, POST daha fazla

hatırladıklarım bunlar. umarım açıklayıcı olmuştur.
Kasa : RAIDMAX AEOLUS-ATX-WB
PowerSupply :CODEGEN SX500
Anakart : GIGABYTE  GA-970A-DS3
İşlemci :AMD Desktop FX-Series X8120 3.1
Bellek : 4 x 4 GB CORSAIR 1600Mhz, DDR3 CL9 Vegeance
Ekran Kartı : MSI R7 370 GAMING 2G AMD Radeon R7 370 2GB GDDR5 256 Bit
HDD : 4 x Sandisk SSD Plus 480GB
Monitör : 2 x DELL S2240T Dokunmatik

alquirel

Alıntı yapılan: andirinli - 18 Kasım 2010 - 02:11:34
...
1- GET istemci tarafında, POST  sunucu tarafında işlem yapar.
...

Her ikisi de sunucu tarafında işlem yapar. Çünkü GET ile de POST ile de okunan veriler php dosyasında işlenir. Yani php = sunucu ;)

canosayan

Alıntı yapılan: demirhan - 17 Kasım 2010 - 22:56:53
Get ile ilgili geçmişe eklenen verilerin sorun çıkarmaması için veriler gönderilmeden önce md5() te geçirilir. [En sık kullanılan çözüm yolu budur] Böylece
?kuladi=demirhan&sifre=12345
diye gözükmezde
?kuladi=6c06f3c4e367cfe95abb666265df78a8&sifre=8cfa2282b17de0a598c010f5f0109e7d gibi gözükür :)

md5 zorda olsa çözülebilir. bir betik yazarsın. a dan başlayıp sonsuza kadar giderek md5 kontrolü ile eşitlemeyi dener. hatta forumda bir yerde böyle bir çalışma olacaktı
php server tarflı bir dildir. istemcide bir şey yapmaz.
Chmod bizim işimiz.

andirinli

Alıntı yapılan: alquirel - 18 Kasım 2010 - 02:33:23
Alıntı yapılan: andirinli - 18 Kasım 2010 - 02:11:34
...
1- GET istemci tarafında, POST  sunucu tarafında işlem yapar.
...

Her ikisi de sunucu tarafında işlem yapar. Çünkü GET ile de POST ile de okunan veriler php dosyasında işlenir. Yani php = sunucu ;)
cümleme şöylebir bakınca, kastettiğimi tam olarak anlatamadım sanırım. aslında kastettiğim GET metodunda veri aktarımının istemci--->sunucu--->istemci şeklinde olduğu, POST metoduyla ise istemci-->sunucu-->sunucu -->istemci şeklinde olduğu. herhalde şimdi oldu. :)
Kasa : RAIDMAX AEOLUS-ATX-WB
PowerSupply :CODEGEN SX500
Anakart : GIGABYTE  GA-970A-DS3
İşlemci :AMD Desktop FX-Series X8120 3.1
Bellek : 4 x 4 GB CORSAIR 1600Mhz, DDR3 CL9 Vegeance
Ekran Kartı : MSI R7 370 GAMING 2G AMD Radeon R7 370 2GB GDDR5 256 Bit
HDD : 4 x Sandisk SSD Plus 480GB
Monitör : 2 x DELL S2240T Dokunmatik

ecarpar

Alıntı yapılan: demirhan - 17 Kasım 2010 - 22:56:53
Get ile ilgili geçmişe eklenen verilerin sorun çıkarmaması için veriler gönderilmeden önce md5() te geçirilir. [En sık kullanılan çözüm yolu budur] Böylece
?kuladi=demirhan&sifre=12345
diye gözükmezde
?kuladi=6c06f3c4e367cfe95abb666265df78a8&sifre=8cfa2282b17de0a598c010f5f0109e7d gibi gözükür :)
Ben buna katılıyorum andirinli şu tanım bence doğru bir tanım. md5 kırılır elbet, php istediği kadar encrypt etsin kodları algoritmasını birisi kırıcaktır ama genede doğrudan adamın eline kullanıcı adını ve şifreni vermekten iyidir Lamerleri uzak tutar düşüncesindeyim.
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

alquirel

MD5 bir PHP ürünü değildir.
Evrensel bir şifreleme algoritmasıdır.
Ve kırılması imkansızdır.
Sadece deneme yanılmalarla belki sonuca gidilebilir.

http://tr.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/MD5

canosayan

Alıntı yapılan: alquirel - 28 Kasım 2010 - 23:15:38
MD5 bir PHP ürünü değildir.
Evrensel bir şifreleme algoritmasıdır.
Ve kırılması imkansızdır.
Sadece deneme yanılmalarla belki sonuca gidilebilir.

http://tr.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/MD5
Aslında md5 e şifreleme algoritması demek ne kadar doğrudur emin değilim. Md5 genel olarak eşitlik aynılık gibi kontroller için güvenli.
md5 sınırlı uzaylı bir algoritma. bir boşluk karakteri içinde aynı uzunlukta veri üretiyor bir dvd dolusu veri içinde. kombinasyon çok kuvvetli olsada sanırım veri yoğunluğu arttıkça aynı değerlerde üretilebilir. yani tamamen iki farklı metnin md5 döngüsü aynı olabilir.

diğer yönden.
?kuladi=6c06f3c4e367cfe95abb666265df78a8&sifre=8cfa2282b17de0a598c010f5f0109e7d

bunun gibi bir adres kullanımı ne işimize yarar tam kavrayamadım. sonuç olarak tarayıcı geçmişinde böyle bir adres olduğunu varsaydığımızda bu adres yine yetkisiz erişimi sağlayacaktır. sonuçta demirhan ve 123456'nın kodlanmış halleridir. Eğer sistem şifre değiştirirken şifre sormuyorsa çok kolay değiştirilebilir.
bir diğer açıdan bu pek mantıklı bir ölçekleme olmaz. facebook ibi binlerce aktif kullanıcısı olan bir sistem düşünün. giriş yapan kullanıcının kim olduğunu bilmek için tüm kullanıcıları md5 ile şifrelemeli ve hanisi olduğuna karar vermeniz gerekir. 15  karakterli adı olan birisi için bu korkulabilecek bir süreç.
Chmod bizim işimiz.

utdmr

Aslında şu tarz bir sistem olabilir, sunucu kullanıcıya random bir sayı gönderir, kullanıcı bilgilerini girdiğinde çift yönlü bir şifreleme ile anahtar random sayı olacak şekilde şifrelenir ve gönderilir, sistem de önceden gönderdiği random sayı ile karşılaştırır ve buna göre şifreyi alır. Bu sayede girilen adrese bakılarak şifre öğrenilmez random bilinemeyeceği için.

Büyük ihtimalle vardır böyle bir sistem gerçi, tamamen sayfayı okumadıkça engellenebileceğini düşünmüyorum.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

vampire

md5 ile alakalı ufak birşey söyleyeyim gelişen bulut alt yapısı ile hiç birşey imkansız ve dahilinde kırılamaz olamayacak . Örneğin wpa2'nin bulut sistemler ile kırılabildiği kanıtlandı burada birbirimize şu olmaz sen biliyorsun bilmiyorsun demekten ziyade en iyisi hangisi onu paylaşmakta fayda var .

$_GET $_POST phpdeki süper globallerden iki tanesi herbirinin kendine has kullanım alanları var ve cevap verebilme özelliği var ancak $_GET ufak işlemler için kullanılması daha mantıksal durmakta ancak cevap verebildiği ölçüde her noktada kullanabilirsiniz . Bu tamamen size kalmış birşey .
Ya Herşeyim Ya Hiçim !!!

susunx

ben pek gerekli olmadıgı surece kullanmam. get leri genellikle sayfaları bolmek ıcın kullanırım.
örnek vermek gerekirse.. sayfa.php?islem=anasayfa
sayfa.php?islem=iletisim

ICS

GET metodu ile yapılan işlemlerde tüm gönderilen veriler açıktır ve bu önemli güvenlik açıklarına yol açabilir. Ayrıca GET ile gönderebileceğin veri miktarı 1024KB'dır (yanlış hatırlıyor olabilirim). Bunun yanında POST ile verilerini yollarken ziyaretçi bu verileri görmez. Yani bir nevi gizlidir. Bunu belli başlı süzgeçlerden geçirerek dahada güvenli hale getirebilirsiniz. Ayrıca POST ile gönderilebilen maksimum veri miktarı 8MB olması lazım(bunuda yanlış hatırlıyor olabilirim)

fatihuzuner

get ile post aynı işi yaparlar.sadece getten gönderdiğin bilgileri görebiliyorsun.postta göremiyorsun.
www.site.com/giris.php?kullaniciadi=fatih&sifre=deneme
giriş formunu get ile gönderdiğinde şe şekilde bir link oluşur ve bu hiç güvenli değil.Ama mesela;
Alıntı Yapwww.site.com/arama.php?kelime=deneme
burada get kullanmak mantıklı.
Formunuzda birden çok eleman varsa post kullanın.Sadece php tarafında yazacağınız kodlar değişir.
$_GET yerine $_POST yazarsınız.

md5 bir şifreleme algoritmasıdır.yazdığınız karakterleri 40 karaterli sonuca çevirir ve yüzde 90 başarı ile kırılabiliyor.

canosayan

Alıntı yapılan: fatihuzuner - 13 Mart 2012 - 19:41:14
get ile post aynı işi yaparlar.sadece getten gönderdiğin bilgileri görebiliyorsun.postta göremiyorsun.
www.site.com/giris.php?kullaniciadi=fatih&sifre=deneme
giriş formunu get ile gönderdiğinde şe şekilde bir link oluşur ve bu hiç güvenli değil.Ama mesela;burada get kullanmak mantıklı.
Formunuzda birden çok eleman varsa post kullanın.Sadece php tarafında yazacağınız kodlar değişir.
$_GET yerine $_POST yazarsınız.

md5 bir şifreleme algoritmasıdır.yazdığınız karakterleri 40 karaterli sonuca çevirir ve yüzde 90 başarı ile kırılabiliyor.


md5 32 karakterlidir.
http://php.net/manual/tr/function.md5.php
Chmod bizim işimiz.

fatihuzuner

@cansoyan haklısın.Benim aklım veritabanında şifre kısmında varcharı 40 karakter yaptığıma gitmiş :D