Şifreler için preg_replace Filtre

7 Cevap php

PHP ile, ben şifreler için mevcut tek karakterler eksi kontrol kodları ve null, ABD ASCII tiplendirilemeyen olacak şekilde parolalar için preg_replace () filtre kullanmak istiyorum.

I () preg_replace için eklentisi olduğunu ulaşmak için RegEx nedir?

EDIT:

Ben şimdi "olsun" beri bu soruyu düzenlemek için tavsiye ettik ve bu korkunç sevilmeyen tekniği yapıyor olmayacak ve hatta olanları ben, benim klavyede olmayabilir herhangi tiplendirilemeyen karakter izin verecek gibi uzun onlar değil gibi kontrol kodları.

7 Cevap

Diğerleri söylediler, şifreler izin verilen karakter kümesini kısıtlamak değil. Bunun üzerine your klavye ä yok, sırf bir, ya da ö onlara var bize kim dur (veya zaten bunları yazmak için biliyorum) bu harfleri kullanarak için hiçbir neden yoktur. Nasıl olsa (ya da en azından bir şifreli bir dize olarak) bir kriptografik karma olarak parolayı depolamak için gidiyoruz, değil mi? Eğer öyleyse, o zaman bu sizin veritabanı başarıyla / güvenle kripto algoritması tarafından, nasıl olsa şifre sadece karakterler çıkışını gerçek karakterleri saklayabilirsiniz farketmez. (- Bu yapmazsanız Ve değilse, o zaman düz metin parolaları depolamak şifreleri içeren veya olmayabilir ne karakterler daha far büyük bir sorun!)

Karakterinizi güçlendirmek için belirgin niyet sessizce sevmediğiniz karakter sıyırma ziyade kullanıcı anlatarak tarafından kısıtlamaları ayarlamak "sadece bu karakterleri kullanın, bu kez tekrar deneyin ve: a., E, i, o, u" ben kullanmaya kalkarsanız, bana benim gerçek şifre, bilinmeyen, şifre fäîry (son derece güvenli değil, ancak hafif sözlük saldırılarına karşı tutmak gerekir) demek anlamına gelir gibi, önerilen yöntem gerçekten acımasız yapar fry (şifreniz üç harfli bir sözcük, düz sözlük dışında ve yaygın kullanımı ise, siz de bile rahatsız olabilir) olacaktır. Ah!

Şahsen ben her zaman son derece rahatsız edici zaman bir web sitesi veya hizmeti belirli bir (genellikle düpedüz aptal) sınırlaması takip şifreleri kullanmak beni zorlamaya çalıştı buldum.

Onlar çok kolay tahmin edilebilir olmadığını şifreleri bütün mesele değil mi? Niye onlara kullanıcılar bunları olmak istiyorum daha az karmaşık olmak istersiniz? Ben şifreleri için "sadece ASCII" kullanımını gerektiren teknik bir sınırlama hayal edemiyorum.

Kullanıcıların, onlar gibi herhangi bir şifre kullanmak, onları karma ve Base64 dizeleri olarak saklamak edelim. Bunlar sadece ASCII.

Buyrun:

^[ -~]+$

, boş şifreleri istemiyorum varsayarak aksi takdirde bulunuyor:

^[ -~]*$

Boş olanları izin vermek.

Ben insanlar tip şifreleri manipüle dikkatli olurdum - Sana preg_replace soruyorsun neden emin değilim. Iyi yalnızca yazdırılabilir ASCII kabul kuralı uygulamak, ve onlar o kuralı bölerseniz kullanıcı söylemek (diğerleri söylediler ya, herhangi bir kural yok, ama ben onlar için nedenleri var varsayılarak).

Eğer sessizce eşleşmiyor karakterleri kaldırarak düşünüyorsanız, ve birisi Úéåæ bir şifre ile birlikte gelirse, o zaman onların bilgisi olmadan kendileri için boş bir parola saklamak olacak.

Ben artılarını eksilerini ağır basar karar vermek size kalmış olsa olmayan ASCII karakterleri reddetmek için hiçbir neden olmadığını katılmıyorum.

Olmayan ASCII karakterleri izin verirseniz, o zaman doğru web uygulama kısmını uluslar taahhüdünde aslında. Birçok uygulama için, uluslararasılaşma sonradan olduğunu. Web uygulamaları için, bu çok önemsiz olmayan meselesi.

Eğer karakterler ve bayt arasında gittiğinizde açıkça karakter kodlamasını kontrol etmezseniz, o zaman temelde varsayılan Dağıtımınız için olmak için ne olursa olsun güvenmek. Yapılandırma hiç (örneğin, Windows'tan Linux'a geçiş, ya da başka bir web sunucusuna geçiş) değiştirirse, o zaman varsayılan size altından değişen bir şansı var, ve daha sonra non-ASCII karakterleri farklı bir bayt dizisine seri olacaktır. Yani, aniden, onların şifreleri bunları kullanan insanların sağlamalarının veritabanında ne maç olmayacak, ve onların hesaplarının kilitli alırsınız.

Ben, tabii, sadece bu karakterleri filtrelemek için tamamen kabul edilemez olduğunu katılıyorum; Eğer şifreyi kabul veya reddetmek ya var.

Kullanıcı şifreleri filtre etmeyiniz. Bu noktada bir sürü yendi. Ben burada bu konuda daha yazdı: http://www.evanfosmark.com/2009/06/why-do-so-many-websites-fail-with-password-restrictions/

/ [\ P {Cc}] / (ben bu 0-31 kapsayan düşünüyorum) kontrol karakterleri almak için

Ben Richie katılıyorum. Yerine preg_replace ve preg_match kullanın.

function getTypable($s) {
  // gives you ASCII chars from 32 to 127
  $s = filter_var($s,FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
  return $s;
}

... Ama Filtre API PHP5 sürümü ile yüklü olmasını gerektirir. Şimdi yaklaşık bir yıl için, web hosting sağlayıcıları bir sürü Filtre API destekler PHP5'ta bir sürümünü kullanıyorum.