giriş kimlik bilgileri için php sanitasyon komut

3 Cevap php

Ne şu anda arıyorum bir temel, basit, oturum açma kimlik sanitasyon betik.

Ben bir işlev bunu yapmak ve ben bir tane var anlıyorum ... ama şu anda yaptığı tüm şerit etiketler ...

Ben yerine kullanmak mahkum ediyorum? ya da ben sadece o şifre olarak etkilemez, sadece harfler ve sayılar exclimation noktaları, süreleri ve diğer özel karakter sınırlamak ... tüm özel karakterler ve boşluklar kaldırmak ve harf ve sayı sadece bunu sınırlamak bir yol var benim SQL sorgusu.

Lütfen yardım edin :/

Thanks, Matt

3 Cevap

Eğer karakterler insanların adları ve parolalar kullanmak için izin hangi sınırlamak istiyor gibi geliyor. Sıralama böyle.

if (!preg_match('/^[a-zA-Z0-9_]++$/', $username)) {
  // reject username
}

if (!preg_match('/^[a-zA-Z0-9\.!@#$%^&*_-]++$/', $password)) {
  // reject password
}

Bu sessizce kişinin kimlik karakterleri kaldırmak / değiştirmek için kötü bir fikir. Sen onlara bu karakterlere izin verilmez ki geribildirim vermek gerekir. Bu diğerleri zaten andığım güvenlik nedenleriyle bir şifre, izin ne karakterler çok kısıtlayıcı olmak da kötü bir fikir.

Eğer SQL için dizeleri güvenli hale kullanmak istiyorsanız mysql_real_escape_string().

Belirli karakter için bir dize sınırlandırmak istiyorsanız, bir regex kullanabilirsiniz.

Eğer sadece az, 0-9 ve ünlem işareti istiyorsanız Örneğin, kullanabilirsiniz.

   $string = preg_replace('^[^a-z0-9!]+$', '', $string);

Bu regex eşleşmiyor şey dışarı şerit olacak.

Sizin için check isterseniz dize kullanmak, bu desen maçları preg_match(). Okunabilmesi için size ^ çıkar ve patlama değil / / ! operatör yerine sahip ifadeyi devam etmek isteyebilirsiniz.

Kullanmak echo sayfanızda güvenli ing yapmak şeyler dışarı sıyırma bahsediyoruz eğer htmlspecialchars(). Bağlamında bağlı olarak, daha fazla sterilize gerekebilir.

Remember: şifreleri karakterleri sınırlayıcı ediyorsanız, sadece son kullanıcı tarafından hatırlamak daha kolay olacağını teorik bir açıdan mantıklı. Karakter sınırlaması (kontrol etmek için karakter küçük havuz) Şifre kaba forcers kolaylaştırır, ve (onlar tuzlu ve karma olması gerektiği gibi) kendi depolama etkilememelidir.

Öncelikle, hiç bir parola dezenfekte yok. Bu yere yakın bir SQL sorgusu almadan önce uzun sağlaması gerektiğini, bu yüzden aslında tam tersi bir etkiye sahiptir ve kullanıcılar için uygulama daha az güvenli hale olacaktır.


$password = "hey'; --droptable";
$hashedPass = sha1("salt" . $password);
// sha1 returns a alphanumerical hash of the password
// stick the hash in the database

Bir MySQL veritabanı ile ilgili iseniz, mysql_real_escape_string() alex söylediğim gibi yeterince iyi. Eğer bu yöntemle akılda tutulması gereken bir şey, o iş için size MySQL veritabanı için açık bir bağlantı gerekir olmasıdır.


mysql_connect();
$string = "hey'; --droptable";
$string = mysql_real_escape_string($string);
echo $string; // outputs "hey\' --droptable"

Bir kaçış dize yöntem olan birkaç diğer DBMS API vardır, burada bir kaç: http://au2.php.net/manual-lookup.php?pattern=escape_string&lang=en