Kullanıcıdan Aldığım Veriyi Sanitize Edeceğim Ama?
-
kullanıcıyı çok da sıkmak istemiyorum.
username ve password için FILTER_SANITIZE_STRING kullandım ama bu filtreleme biraz geniş o kadar çeşitlilik olsun istemiyorum(username için en azından)
onun dışında preg_replace kullanmamın iyi ya da kötü yönleri var mıdır? sanki server'ı daha az yorar gibi geldi bana ama bu konudaki görüşleriniz nelerdir
bi de şöyle görüşlerinizi alayım kullanıcı adı için a-z A-Z 0-9 ve _ karakterlerine izin vermeyi düşünüyorum
şifre için napsam? + - % & falan kullanmak ister adamlar belki? büyük küçük harf tabi olacak da...
preg_replace ile bunları halledebiliyorum ama FILTER_SANITIZE_STRING'e müdahale edebiliyor muyum hiçbir bilgim yok :/
ha bir de htmlspecialchars() var.
hangisini kullanmamın ne avantaj-dezavantajı olur?
şöyle de bir deneme yaptım şu kodlarla:
<?php $girdi = ' abcçdefgğhıijklmnoöprsştuüvyz <br> ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ <br> "1234567890*-,+-/.:,; <br> !^+%&/()=?_ ...<br> >£#$½{[]}\||<>@€ß <br> kiril ́щертыуопасдфгхйклизхцвбнмQЩЕРТЫУИОПАСДФГХЙКЛЗХЦВБНМ ІѢѲѴѵѳѣі«»„“—…́<br> tamil கஙசஞடணதநனபமரரயறவழலளஷஸஜஹ <br> arap اسدعهجكلزخچڢبنمرتيووكمبڢجففهمهع<br> japon 々ヽ」ゞヾヽ「、。。七入臨癒癖癖織織曜懲懲礎顔 <br> '; $sonuc = preg_replace('/[a]/i', '..', $girdi); echo $sonuc.'<br><br>'; '#[^a-z0-9]#i'; echo filter_var($girdi, FILTER_SANITIZE_STRING).'<br><br>'; echo htmlspecialchars($girdi);çıktı da bu şekilde:
kofcu tarafından 14/Ağu/15 12:38 tarihinde düzenlenmiştir
-
gerçi javascript ile ayarlarım o işi ya gereksiz kasmışım şimdi fark ettim :)
-
Şifreyi kriptolu halde saklamayacak mısın? İşlem yaparken kriptoladıktan sonra işlem yaparsan özel karakterler canını sıkmaz.
http://www.tahribat.com/document-php-ile-basit-sql-injection-onleme-yontemleri-417/
Kullanıcı adını kısıtlamak için şuradakini kullanabilirsin. Ayrıca js ile kısıtlama yapma. Js kapatılınca tüm filtren kapanır.
Austen tarafından 14/Ağu/15 12:52 tarihinde düzenlenmiştir -
Austen bunu yazdı
Şifreyi kriptolu halde saklamayacak mısın? İşlem yaparken kriptoladıktan sonra işlem yaparsan özel karakterler canını sıkmaz.
http://www.tahribat.com/document-php-ile-basit-sql-injection-onleme-yontemleri-417/
Kullanıcı adını kısıtlamak için şuradakini kullanabilirsin. Ayrıca js ile kısıtlama yapma. Js kapatılınca tüm filtren kapanır.
js kapanınca tüm filtremin kapatılacağını biliyorum. ondan php ile uğraşıyorum zaten ama bi adam gelip js kapatıp js ile engellediğim karakterleri girmeye çalışırsa giremesin uyarı vermesem de olur zaten jsyi kapatacak kadar anlıyorsa bu işi bunun ondan dolayı işin istediği gibi olmadığını bilir uyarı vermeme gerek yok. sanitize edeceğim sadece yani validate etmeyeceğim. zaten yazı ile de uyarımı koyarım şu şu karakterler geçerli diye. ilginç olan şey filter sanitize string japonca da karakter girse bir şey demiyor geçiriyor. sadece XSS ye neden olabilecek şeyleri siliyor aslında bu da çok istediğim bir durum değil onun yerine htmlspecial chars ın yaptığı gibi "  gibi karakterlere dönmesi daha işime gelir. ama heryerde de filter input ile alın bilgiyi diyor. sanırım htmlspecialchars($_POST) ile alınca adam post'un içine --- asdasd); "istediği kod" --- şeklinde yazabileceğinden filter input koy diyorlar ama dediğim gibi onun filtrelemesi de çok geniş biraz daraltmak istiyorum.
bunun dışında passwordu şifreleyeceğim evet. bunu öğrendiğim yerde de passwordu zaten kriptleyeceğiz o yüzden ekstradan sanitizasyona gerek yok diyordu ama düşündüm de yine de bi açık oluşturabilir bu durum.
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); $email1 = filter_input(INPUT_POST, 'email1', FILTER_SANITIZE_EMAIL); $email2 = filter_input(INPUT_POST, 'email2', FILTER_SANITIZE_EMAIL); $pass1 =$_POST["pass1"]; $pass2 =$_POST["pass2"];örneğin burda da adam pass'i --- asdasd; "istediği kod" --- şeklinde yapabilir diye düşündüm o yüzden şifreye de filtre koymayı uygun gördüm.
-
$pass = addslashes($_POST['hede']) yemiyor mu?
-
$a = "asdasdasdasd); blablabala";
$b = "々ヽ」ゞヾヽ「、。。七入臨癒癖癖織織曜懲懲礎顔";
$a_md5 = md5($a);
$b_md5 = md5($b);
// a: string(32) "08ef1de9905341e3425ed88ae7f9248e"
// b: string(32) "ebf2b8eb47de022c0699e9966198a495"
Kriptolamaktan kastım bu. Hangi karakteri girersen gir sonuçta çıktı bu olacak. SQL sorgulatırken de bu halleri sorgularsan nasıl bir problem yaşanabilir ki?
Ayrıca kullanıcının verisini ya sorgulayıp girmemesini sağlamak ya da giriliyorsa ona uygun geriye döndürmek lazım. Yoksa kullanıcı girdiği verinin sağından solundan kırpılmış halini görmek istemez. Anca forum mesajı gibi yerlerde filtreleme yaparsın onda da sıkıntı olmaz.
Js kapatmayı öğrenmekte bir şey yok ki. Tarayıcının ayarlarına gir javascripti de-aktif et ya da noscript gibi bir eklenti kur oldu bitti.
Austen tarafından 14/Ağu/15 18:20 tarihinde düzenlenmiştir -
Austen bunu yazdı
$a = "asdasdasdasd); blablabala";
$b = "々ヽ」ゞヾヽ「、。。七入臨癒癖癖織織曜懲懲礎顔";
$a_md5 = md5($a);
$b_md5 = md5($b);
// a: string(32) "08ef1de9905341e3425ed88ae7f9248e"
// b: string(32) "ebf2b8eb47de022c0699e9966198a495"
Kriptolamaktan kastım bu. Hangi karakteri girersen gir sonuçta çıktı bu olacak. SQL sorgulatırken de bu halleri sorgularsan nasıl bir problem yaşanabilir ki?
Ayrıca kullanıcının verisini ya sorgulayıp girmemesini sağlamak ya da giriliyorsa ona uygun geriye döndürmek lazım. Yoksa kullanıcı girdiği verinin sağından solundan kırpılmış halini görmek istemez. Anca forum mesajı gibi yerlerde filtreleme yaparsın onda da sıkıntı olmaz.
Js kapatmayı öğrenmekte bir şey yok ki. Tarayıcının ayarlarına gir javascripti de-aktif et ya da noscript gibi bir eklenti kur oldu bitti.
yeterince php bilmediğimden kaynaklı, belki istemeyeceğim bir şeyler yapılabilir(bilmiyorum yapılabilir mi ama), php dosyamın içine kod girmesin diye filtrelemek istedim hocam. sql injection dan korkum yok zaten prepared statements kullanacağım.
ayrıca dediğim gibi biraz sınırlandırmak istiyorum username ve password'ü bunun için preg_replace mi kullanmalıyım en uygun ne kullanmalıyım?
aslında aklıma geldi ya sanırım benim işime gelecek şey şu:
$uname = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$username = preg_replace('/^a-z0-9_/i', '', $uname)$pass= filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$password = preg_replace('/^a-z0-9_/i', '', $pass)//// create the hmac ///// $hmac = hash_hmac('sha512', $password, file_get_contents('secretkey.txt')); //// create random bytes for salt //// $bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); //// Create salt and replace + with . //// $salt = strtr(base64_encode($bytes), '+', '.'); //// make sure our bcrypt hash is 22 characters which is the required length //// $salt = substr($salt, 0, 22); //// This is the hashed password to store in the db //// $bcrypt = crypt($hmac, '$2y$12$' . $salt);
sonra işte prepared statement ile $username i username e $bcrypt i password e yazdırıyoruz
loginde de passwordde aynı kriptografiyi logine yazılan password girişine uygulayıp database deki kriptlenmiş şifreyle karşılaştırıyorum -
gerçi milletin şifresine karışmayayım ya istediğini yazsınlar :D şifre için preg_replace uygulamayacağım.
-
Zaten milletin şifresiyle oynaman saçma olur hocam. Millet özel karakter koysunlar diye özellikle diretiyor ki güvenli olsun. Sen dersen ki sadece alfabetik ve sayı gireceksin hem şifre güvenliği düşer hem de kısıtlarsın. Dediğim gibi kriptolu halleriyle kıyaslama yaparsan db'ne sadece 32 karakterlik string veri gönderirsin onu kıyaslarsın. O 32 karakter neyin sonucunda oluşturulursa oluşsun senin db'ne zarar veremez. Kullanıcı adı dediğin şeye de özel karakter kısıtlaması getirirsin, sıkıntı olmaz kimse de zorlamaz niye bunu kullanamıyorum diye.
Username ve password'de replace işlemi çok can sıkar. Kullanıcıya da kendine de yük getirir. Kontrol ettirip uygun girilmesini sorgulamak daha mantıklı. Sen adamın nickinden 1 harfi bile değiştirsen belki adam hesabına giriş yapamaz.
Austen tarafından 14/Ağu/15 22:04 tarihinde düzenlenmiştir -
Austen bunu yazdı
Username ve password'de replace işlemi çok can sıkar. Kullanıcıya da kendine de yük getirir. Kontrol ettirip uygun girilmesini sorgulamak daha mantıklı. Sen adamın nickinden 1 harfi bile değiştirsen belki adam hesabına giriş yapamaz.
evet ben de zaten kontrol ettirip uygun girdireceğim normalde. bunu ama javascript'le yapabiliyorum. ondan kullanıcı javascripti kapatırsa falan uyaramayacağım için kendimce bi önlem almam gerektiği için bir de php ile filtreleme yapıyorum. password'de hemfikiriz artık orayı ellemiyorum ama username istediğim gibi olmalı bence orayı preg_replace ile filtreliyorum o yüzden. tabiki js ile formda gerekli uyarıları belirteceğim ama inadına acayip işler yapmak isteyen uyarılara aldırış etmeyen bir kullanıcı olursa o da kurala uymamanın karşılığını preg_replace ile alsın işte :)
-
öğrendim ki, FILTER_SANITIZE_STRING'e müdahale etmek FILTER FLAG'lar ile oluyormuş.
php_ validation_ sanitation_ preg_replace_ filter_sanitize_string_ htmlspecialchars_
