PHP'nin `crypt ()` in bir hata buldunuz?

3 Cevap php

Ben Windows altında PHP'nin crypt() fonksiyonunda bir hata bulduk düşünüyorum.

However: Ben tanımak it's probably my fault. PHP milyonlarca insan tarafından kullanılan ve binlerce üzerinde çalıştı; Benim kod onlarca tarafından kullanılan ve bana göre üzerinde çalıştı. (Bu argüman explained on Coding Horror en iyisidir.)

Bu yüzden yardım için soruyorum: show me my fault. Ben şimdi bir kaç gün için onu bulmak için çalışıyor ettik, hiçbir şans ile.

The setup

Apache 2.2.14 (Win32) ve PHP 5.3.2 ile bir Windows sunucu yüklemesi kullanıyorum. Benim geliştirme kutusunu, Windows XP Professional çalışır; 'üretim', sunucu (bu bir intranet kurulum) Windows Storage Server 2003 çalışır. sorun, hem olur.

I php.ini crypt() ile ilgili herhangi bir şey görmüyorum, ama mutlu benim yapılandırma ile ilgili sorulara cevap verecektir.

The problem

Benim PHP app birkaç komut bazen asmak: sayfa 'localhost bekliyor' orada oturur ve hiçbir zaman tamamlanmaz. Bu komut her crypt veritabanında saklanan sürümle karşılaştırarak önce girilen şifreyi karma, giriş sayfasının durumunda, veritabanında saklamadan önce bir kullanıcının parolasını karma veya kullanır.

Giriş sayfası basit olduğundan, ben test için üzerine odaklanmıştır. Ben defalarca kaydedilir, ve belki 10 üzerinden 4 kez askıda olacağını bulundu.

Bir deneme olarak, düz metin parola kullanmak için giriş sayfası değişti ve düz metin sürümü veritabanında şifremi değiştirdim. Sayfa asılı durdu.

PHP'nin son sürümü bu bugfix listeler olduğunu gördüm:

Fixed bug #51059 (crypt crashes when invalid salt are [sic] given).

Aşağıdaki gibi Yani verilen aynı tuzu kullanılarak, çok basit bir test komut dosyası oluşturulur an official example:

$foo = crypt('rasmuslerdorf','r1');
echo $foo;

Ben deli gibi yeniden bu sayfa da, askıda. Ben sadece see Chrome'da asılı, ama ne olursa olsun tarayıcı, Apache üzerinde etkisi aynıdır.

Effect on Apache

Bu sayfalar asmak zaman, Apache server-status page (I açıkladığı here, farklı bir sorun ile ilgili olarak) işlenen isteklerin sayısını artırır ve atıl işçilerin sayısını azaltır. Istekler hemen hemen tüm, bazen bir an için 'Okuma isteği' ya da gösterecektir olsa 'Cevap gönderme' bir statüye sahip işleniyor 'keepalive'ı (okuyun).'

Sonuç olarak, Apache may crash. Bu olduğunda, Windows kilitlenme raporu şöyle:

szAppName: httpd.exe
szAppVer: 2.2.14.0
szModName: php5ts.dll
szModVer: 5.3.1.0 // OK, this report was before I upgraded to PHP 5.3.2, 
                  // but that didn't fix it
offset: 00a2615

Is it my fault?

Ben bu konuda PHP bug rapor çeliyor. Buna karşı argüman bugs are nearly always my fault., yukarıda belirtildiği gibi, bir

Ancak, 'bu PHP'nin suçu' lehine benim argüman:

  1. Ben bir kenar davayı buldum ki en sunucuları Linux (Ben bu seçim için alamadım) kullanmak ise ben, Windows'u kullanıyorum, bu yüzden şansı daha fazladır
  2. Orada crypt() ile bir hata son zamanlarda, belki hala sorunları var
  3. Elimden basit test durumda yaptık ve ben hala sorun var

Yanlış yaptığımda burada Can anyone duplicate this? Ne önerebilirsiniz? Ben sonuçta hata dosyası gerekir?

Eğer verebilir Herhangi bir yardım için şimdiden teşekkür ederiz.

3 Cevap

Hata 51059 (sadece geçersiz girişleri geçen yaklaşık) veya 50947 (değil aynı kod, 5.3 tüm platformlarda, yeni algoritmalar ve php uygulanan özelliklere sahiptir), bu sorun ile ilgili değildir.

Ancak http://bugs.php.net/bug.php?id=51424 olduğunu. Ben zaten orada bir kısmi yama yayınlanmıştır, ama bu mümkün kilitleri en çözer ama bu gerçekten yeterli değildir. Tam bir düzeltme sonraki 5.3 sürümünde mevcut olacaktır.

Bu arada, bu özel camlar değil ama dişli SAPI hakkında (örneğin camlar 2.2 apache).

Bu soru şimdi 128 kez izlendi ve 9 kez upvoted edilmiştir. Aldığım tek cevap bir hata, ve PHP hata veritabanında birine puan diyor. Ben tam olarak aynı bir olduğunu sanmıyorum, ama benim tanıyı doğrulamak gibi görünüyor.

Bu nedenle, bazı tereddüt, ben bir hata raporu bulundular:

Bug #51666 - Using crypt() makes Apache hang or crash

Benimle bu baktı herkese teşekkürler - size cevap vermedi bile, sadece başkalarının bana bu dikkate olduğunu bilerek, ve ben deli olduğumu bana değil, yararlı olmuştur.

Evet. Bu bilinen bir hata var,

http://bugs.php.net/bug.php?id=50947

Sen mcrypt kullanarak crypt () sonuç benzetilebilir. Eğer şifrenizi karma değiştirebilirsiniz, eğer gerçekten daha güvenli olan () hash_hmac kullanmak gerekir ve biz Apache üzerinde onunla hiçbir sorunları var. Ama Windows üzerinde hiçbir deneyimleri.