Gerçekten söyleyebilirim: adlarını doğrulamak kalkmayın: bir gün veya başka, kod ... o "yanlış" olduğunu düşünüyor bir ad buluşacak Ve nasıl bir uygulama "{[söyler zaman bir tepki vereceğini düşünüyorsunuz (0)]} "?
Eğer gerçekten ulaşmak istediğinize bağlı olarak, "değil-adları" düşündünüz dışlamak için, kara / filtreleri çeşit kullanarak düşünebilirsiniz: en azından belki bazı "kötü-adları" geçmesine izin verecek, ancak, bu Başvurunuzu erişmesini varolan herhangi bir ad engel olmamalıdır.
Burada akla gelen kuralları birkaç örnek:
- Hiçbir numara
"~{()}@^$%?;:/*§£ø
gibi özel bir karakter, ve muhtemelen bazı diğerleri
- artık 3 boşluk olduğunu?
- none of "admin", "support", "moderator", "test", and a few other obvious non-names that people tend to use when they don't want to type in their real name...
- (Onlar kendi adını vermek istemiyorum ama, onların hala, bazı rasgele harfler yazarak onları korusun bile, onlar sadece kendi ait değil ... Hangi gerçek bir isim kullanabilirsiniz olmaz)
Evet, bu mükemmel değil; ve evet, bazı olmayan isimler geçmesine izin verir ... Ama birisi "senin adın yanlış" (yes, I insist ^^ ) söyleyerek daha da uygulama için muhtemelen iyi bir yol var
And, to answer a comment you left under one other answer :
I could just forbid the most command
characters for SQL injection and XSS
attacks,
SQL Injection hakkında, veritabanına bu göndermeden önce verilerinizi kaçmak gerekir; her zaman bu verileri kaçış eğer, (! yapmanız gerekir), umurumda gerekmez kullanıcıların neleri olabilir girişi ya da değil: kaçtı gibi, her zaman, sizin için hiçbir riski yoktur.
XSS hakkında aynı: (! Gerekir) bunu ouputting zaman her zaman verilerinizi kaçış olarak, enjeksiyon riski yoktur ;-)
Eğer sadece böyle olduğunu regex kullanırsanız EDIT :, oldukça iyi çalışmaz:
Aşağıdaki kodu:
$rexSafety = "/^[^<,\"@/{}()*$%?=>:|;#]*$/i";
if (preg_match($rexSafety, 'martin')) {
var_dump('bad name');
} else {
var_dump('ok');
}
Size en az bir uyarı alırsınız:
Warning: preg_match() [function.preg-match]: Unknown modifier '{'
Siz bu özel karakter, en azından bazı kaçmak gerekir; Sana PCRE Patterns daha fazla bilgi almak için (there is really a lot to know about PCRE / regex ; and I won't be able to explain it all) kazmak izin vereceğim
Aslında bu karakterlerin hiçbiri verilerinin verilen bir parça içeride olup olmadığını kontrol etmek istiyorsanız, böyle bir şey ile sonuna kadar olabilir:
$rexSafety = "/[\^<,\"@\/\{\}\(\)\*\$%\?=>:\|;#]+/i";
if (preg_match($rexSafety, 'martin')) {
var_dump('bad name');
} else {
var_dump('ok');
}
(This is a quick and dirty proposition, which has to be refined!)
This one says "OK" (well, I definitly hope my own name is ok!)
And the same example with some specials chars, like this :
$rexSafety = "/[\^<,\"@\/\{\}\(\)\*\$%\?=>:\|;#]+/i";
if (preg_match($rexSafety, 'ma{rtin')) {
var_dump('bad name');
} else {
var_dump('ok');
}
"Kötü bir isim" diyecek
Ama ben not tam bu test ettik not, ve muhtemelen daha fazla çalışma ihtiyacı lütfen! Eğer çok dikkatli test sürece sitenizde kullanmak etmeyin!
Also note that a single quote can be helpful when trying to do an SQL Injection... But it is probably a character that is legal in some names... So, just excluding some characters might no be enough ;-)