Kullanıcı giriş doğrulama veya ï ¿½ ï ¿½ ï ¿½ ï ¿½ ï ¿½ ï ¿½ ï ¿½ ï ¿½ ï ¿½

2 Cevap php

Biz, kullanıcıların tek bir metin girişine bir veritabanı arama izin veriyorsun ve ben bazı kullanıcı sağlanan dizeleri filtreleme zorluklar yaşıyorum.

Örneğin, eğer kullanıcı gönderir:

��������� lcd SONY

(? 'S Not) Ben aramayı iptal etmek gerekir.

Ben o kadar kolay çalıştırmak tamamladı yukarıdaki dize base64 kodlanmış sürümünü içerir:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z"));

Ben daha önce böyle girişleri göz ardı ancak mysql veritabanı sorgu yürütmek neredeyse sonsuza kadar alıyor fark ettim şimdi bu yüksek öncelikli şimdi (neden emin değilim) var.

Biz UTF-8 kullanıyor ve mb_detect_encoding olduğunu vurgulamak için bir başka örnek çok yardım etmiyor:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU="));
ΠΛυντηριο ρουχ�%

Yani:

  • nasıl / filtresi, bu girişler tespit edebilirsiniz?
  • bu nasıl girdi üretiliyor?

2 Cevap

". -;", Vb, bu gerçekten (reccommend yok olan) filtrelemek istiyorsanız, hem de alfanümerik bir çek yapmamıza rağmen elde edilmemelidir

Sen filtreleme sürecinde size yardımcı olmak için bu fonksiyonların bazılarını kullanabilirsiniz.

http://www.php.net/manual/en/function.ctype-alnum.php

Eğer mysql bağlantısını oluşturduktan sonra bu sorguları yürütmek, bu tükürerek olmadan utf-8 girdi ve sadece iyi sonuçlarını işlemek gerekir 's.

mysql_query("SET character_set_client=utf8", $mysqlConn);
mysql_query("SET character_set_connection=utf8", $mysqlConn);
mysql_query("SET character_set_results=utf8", $mysqlConn);

(Veritabanı utf-8 ayarlanır ve onlar dönüşmesi yoksa onları filtreleme değil umursamıyorum varsayarak? 'Ler)

(Aynı zamanda diğer dbms muhtemelen benzer işlevlere sahip, sen mysql kullanarak varsayarak)