form alanları boş değilse işlevi çalıştırabilirsiniz

3 Cevap

Bu gibi isset şifreyi göndermek için tamam mı?

Ben olması gerektiği if(isset($_POST['username']) && isset(md5($_POST['password']))) düşünüyorum - o şifreli nakleder beri, ama ben şifre etrafına sarın md5 eğer ben koşullu, düzgün çalışmıyor w /.

if(isset($_POST['username']) && isset($_POST['password'])) {
 //run authentication
} else {
 //show form
}

3 Cevap

Brad evet tamam. Parolayı hashed (şifrelenmiş değil) ilanıyla hiçbir yararı gerçekten yoktur. Öncelikle, bunu yapmak için javascript kullanmak zorunda ve kolayca atlatılabilir oluyor. Sunulan şifre karma saklanan karma değeri ile karşılaştırmak için sunucu tarafında yapılmalıdır.

Edit:

Ayrıca, aşağıdaki çalıştırmak ve ne olsun görmek:

<?php echo md5(NULL);

Böylece, md5 always bir değer döndürür.

Bunun üzerine aşağıdaki çalıştırmayı deneyin:

<?php var_dump(isset(md5($_POST['password'])));

Göreceksiniz aşağıdaki: Fatal error: Can't use function return value in write context

isset() bir değişken yalnızca kullanılabilir.

Edit:

hashing ve encryption arasında bir fark yoktur. MD5 hash basit, hatta şifreli olarak güvenli olmadığı biridir.

Evet, sunucuya düz metin parolaları göndermek, ama onlara istemci tarafında karma same thing olduğunu olmamalıdır. Sen HTTPS şifre form gönderimler için kullanıyor olmalıdır, bu nasıl sunucu ve istemci arasında size encrypt iletişim.

Bütün amacı

if(isset($_POST['username']) && isset($_POST['password'])) {

hem POST parametreleri kullanılabilir / ayarlanmış olup olmadığını kontrol etmektir. Dahil, hiçbir kimlik doğrulama yok, her iki elementin türü hakkında bile bir varsayım (dizeler, diziler, ... olabilir). Sadece "Orada isteği böyle bir parametredir" ve "Ben bir haber yükselterek olmadan bu öğe erişebilirsiniz: tanımsız endeksi".

No let's compare that to isset(md5($_POST['password'])) md5() takes a string, so md5($_POST['password']) makes two assumptions.
a) There is an element $_POST['password'], the very thing the "original" test checks.
b) (string)$_POST['password'] makes any sense, since whatever you pass to md5() is cast to string. If you pass an array the result is the same as for md5('Array');
Plus md5() always returns a string (the string representation of the hash for the input), so isset() is always true and doesn't make much sense there. (edit: would be always true, if isset() could be used with the return value of a function. But it can't, see comments)

alt çizgi; "Orijinal" versiyonu "iyi tanımlanmış" bir amaç, isset (md5 (..)) o kadar çok versiyonu ;-) vermektedir

Alanları gönderildiğinde bir biçimde ise, o zaman bu değerler always olacak isset. Ne muhtemelen kontrol etmek istiyorsanız onlar boş olup olmadığını ya da değildir. Basit bir yolu boş bir dizeye karşılaştırmak için, ama bu ilk, aksi halde, değişken ayarlı olup olmadığını kontrol formu teslim olmamıştır zaman, bir uyarı "dizi anahtarı yok" alırsınız gerektirir. Neyse ki, olmayan bir falsey değer olup olmadığını empty() which checks whether a given variable has been set and olarak adlandırılan kullanışlı bir yöntem var - dolayısıyla genellikle bir şey not boş olup olmadığını kontrol etmek istiyorum.

$x = "";
!empty($x);  // false
isset($x);   // true :(

// beware though:
$x = "0";
!empty($x);  // false

Bunun için bir kısaltma olarak düşünün:

isset($x) && $x != false