2012-06-12 14 views
10

Şimdi, bir süre için posta verilerimin ayarlanıp ayarlanmadığını kontrol etmek için aşağıdakileri kullanıyorum.

if(! empty($_POST)) { } 

Ama son zamanlarda yukarıda bir "hack" ve aşağıda doğru "daha iyi" yol olduğunu söyleyerek mesajların çok görüşüyorum.

if($_SERVER[ 'REQUEST_METHOD' ] === 'POST') { } 

Yakın zamana kadar sadece yakın zamanda bulduğum anlamına gelir. Bu sonraki yöntemi tartışan tüm yazılar 2009'ish. Standartları kodlayarak biraz eski, bu konuda yeni bir fikir edinmek için bu konunun ne kadar iyi olduğunu anladım.

İki yöntemin farklı olduğunu anlamaya geldim. Birincisi, bir gönderi talebi yapıldığında, posta dizisinin ayarlanmış olup olmadığını kontrol eden bir "kesmek" olarak kabul edilir. İkincisi aslında bir posta isteği yapıldığını görmek için sunucuyu kontrol eder. Sanırım ikinci biraz daha güvenli olabilir, ama eğer bilgi zaten temizlenirse, bunun nasıl bir fark yarattığını görmüyorum.

Ben de daha sonra sadece PHP sürümlerinde kullanıldığını mesajları gördüm < = 4 PHP hala bu noktada $_REQUEST küresel kullanıyordum ve bu kullanılan yolu PHP kodlama çünkü Belirli istek parametrelerinin kaynağını belirlemek. Son ifadenin ne kadar doğru olduğundan emin değilim, çünkü eski yayınlarda ortaya konan sorular benimkiyle aynı. Küresel yayını kullanıyorlar ve talep etmiyorlar. Ancak, bu, diğerlerinden (2011) ve güvenmeye başladığım bir kaynaktan daha yeni bir yayın. Bu yüzden ne yapacağımı bilemiyorum. olsun denetlenirken

Ve ne yapacağını? Birkaç kez gördüm, sunucu isteği yönteminin bu örnekte çalıştığı görünmüyor ve bunun yalnızca süper postanın alındığından ve istek yönteminin yalnızca bir parametreyi tutabileceğinden kaynaklandığını söyleyebilirim. Yani hem gönderip hem de veri aldığınızda ne yaparsınız? Bu yayınlardan birine yapılan bir yorum, yayının yerine genel olarak istek kullanılmasını önerir, ancak kötü bir fikir olduğu izlenimine kapıldım. Cevap yorumlar (nickf) olarak

This bulabildiğim en son kaynak olduğunu ve göndermeden önce tarafında benzer sorular bakarak yaptı. Özellikle formun geçirilip geçirilmediğini kontrol etmek için bir gönderim değeri kullanmak isteyip istemediğinizi sorar, ancak istek yönteminden de söz eder. Birçoğu, daha sonra hala yaygın olarak kullanıldığını gösteriyor. Yani bu tavsiye hala geçerli mi? İstek yöntemini hala en iyi seçeneği kontrol ediyor mu?

+0

olası yinelenen [isset $ \ _server \ [ 'TALEBİ \ _METHOD' vs ($ \ _ POST \ [\] 'to') \] == 'POST'] (http: // stackoverflow .com/questions/10943060/isset-postsubmit-vs-serverrequest-method-post) –

cevap

10

Evet, hala var ve hala% 100 güvenilir. $_SERVER["REQUEST_METHOD"] var, kullanıcının bağlantısı tarafından kullanılan gerçek istek yöntemine göre PHP tarafından ayarlanır. Bir kullanıcı, bir sorgu parametresinde gönderemez veya istek türünü değiştirmekten başka, bu varlığın değerini etkilemez.o bir yazı gerçekleştirmek ancak örneğin karşıya herhangi bir veri göndermez için mümkün IS çünkü

Sizin if(!$_POST), güvenilir değildir:

<form method="post"> 
<input type="submit" /> 
</form> 

böyle boş $ _POST dizi üretecek - hayır vardır formdaki form öğeleri adlandırılmış, bu nedenle hiçbir veri gönderilmeyecek, yine de bir POST gerçekleştirilecektir.

PHP4'ün bu süper küreselliğe sahip olmaması konusunda endişelenmem. PHP 4 bir taş yaş sürümüdür ve v4'ü destekleyen, ancak v5 üzerine inşa edilen kod, o kod üzerinde çalışmak zorunda olan herkesin kabuslardan muzdarip olması için geriye dönük uyumluluk sağlamak için çok fazla çirkin/iğrenç hack içermesi gerekir. PHP 4 ölü sayılmalı ve gitmiş olmalı.

+0

Peki o zaman değişkenleri nasıl kontrol edersiniz? İstek yöntemi, gönderi olmak için, tekrar kontrol etmek için tekrar kullanamazsınız. Ya da sadece bu zaten güvenilmezdir, bu yapılabilecek en iyi şey dizinin boş olmadığını garanti etmektir? BTW: PHP4 üzerinde gerçekten endişeli değildi, bu yorumun kaynağı, istek yönteminin nedeni olarak, görünüşe göre yanlış olduğunu açıklıyordu. – mseancole

+0

Ne demek istiyorsun, değişkenleri kontrol et? Bu nedenle, $ _GET' ve '$ _POST' için post ... –

+0

belki de tek bir onay kutusuna sahip bir form, bir gönderiyi tespit etmeniz gerektiğinde daha gerçekçi bir örnek olabilir, ancak * herhangi bir değere sahip olmayabilir. – goat

İlgili konular