2010-04-12 13 views
6

Umożliwiamy użytkownikom przeszukiwanie bazy danych za pomocą pojedynczego wpisu tekstowego i mam trudności z filtrowaniem niektórych łańcuchów dostarczanych przez użytkownika.Sprawdzanie poprawności danych wprowadzanych przez użytkownika lub

Na przykład, jeśli użytkownik przedkłada:

��������� lcd SONY 

(Zauważ, że 's?) Muszę anulować wyszukiwanie.

ja zawierać zakodowane base64 wersję powyższego łańcucha owinięty w górę tak, że jego proste run:

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

mam ignorowane takich wejść wcześniej, ale teraz (nie wiem, dlaczego) po prostu sobie sprawę z zapytania do bazy danych mysql trwa prawie wiecznie, więc jest to teraz priorytetem.

Innym przykładem podkreślić, że używamy UTF-8 i mb_detect_encoding nie pomaga wiele:

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

Więc:

  • jak mogę wykryć/filtrować tych wejść?
  • W jaki sposób generowane jest to wejście?
+2

Odrzucanie tych danych wejściowych jest niewłaściwe. Musisz zrozumieć, dlaczego mają one niekorzystny wpływ na wydajność. – SLaks

+0

To jest pierwsza linia obrony. Utknąłem w tej chwili, więc będę badał problem z wydajnością bazy danych, dopóki nie otrzymam jasnego pomysłu. – zaf

+0

Czy mówisz, że użytkownik ręcznie wprowadza znak zastępczy? http://www.fileformat.info/info/unicode/char/FFFD/index.htm –

Odpowiedz

1

Nie powinno być coraz że chociaż jeśli naprawdę chcesz filtrować (czego nie polecam), wykonaj test dla znaków alfanumerycznych, jak również „- .;” itp

Możesz użyć niektórych z tych funkcji, aby pomóc Ci w procesie filtrowania.

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

+0

Czy to coś takiego jak "παπουτσια"? – zaf

0

Jeśli wykonanie tych zapytań po utworzeniu połączenia z mysql, powinien obsługiwać UTF-8 wejściowe i wyniki dobrze bez wypluwa? '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); 

(zakładając, że baza danych jest ustawione na UTF-8 i nie przeszkadza ci nie filtrując je, jeśli nie zamieni się? 'S)

(także zakładając używasz mysql, inne dbms prawdopodobnie ma podobne funkcje)

+0

Otrzymujemy te dane wejściowe od użytkownika, zanim jeszcze dotknie bazy danych. – zaf

Powiązane problemy