2010-04-12 6 views
6

Nous permettons aux utilisateurs de rechercher une base de données à partir d'une seule entrée de texte et j'ai des difficultés à filtrer certaines chaînes fournies par l'utilisateur.Validation de l'entrée utilisateur ou

Par exemple, si l'utilisateur soumet:

��������� lcd SONY 

(Notez que le 's?) Je dois annuler la recherche.

I comprennent la base64 version codée de la chaîne ci-dessus enroulé de façon à ce que sa course facile:

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

J'ai ignoré ces entrées avant, mais maintenant (ne sais pas pourquoi) vient de réaliser la requête de base de données MySQL est en train de prendre presque éternellement à exécuter, c'est maintenant en haute priorité.

Un autre exemple pour souligner que nous utilisons utf-8 et mb_detect_encoding n'aide pas beaucoup:

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

Alors:

  • comment puis-je détecter/filtrer ces entrées?
  • Comment cette entrée est-elle générée?
+2

Rejeter ces entrées est une mauvaise chose à faire. Vous devez comprendre pourquoi ils affectent la performance en premier lieu. – SLaks

+0

Ceci est la première ligne de défense. Je suis coincé en ce moment, donc je vais enquêter sur le problème de performance de la base de données jusqu'à ce que je reçois une idée brillante. – zaf

+0

Êtes-vous en train de dire que l'utilisateur saisit manuellement le caractère de remplacement? http://www.fileformat.info/info/unicode/char/FFFD/index.htm –

Répondre

1

Vous ne devriez pas obtenir que, bien que si vous voulez vraiment filtrer (que je ne le recommande), faire un chèque de caractères alphanumériques, ainsi que « - .; », etc.

Vous pouvez utiliser certaines de ces fonctions pour vous aider dans le processus de filtrage.

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

+0

Est-ce que cela gère quelque chose comme "παπουτσια"? – zaf

0

Si vous exécutez ces requêtes après avoir créé la connexion à MySQL, il doit gérer l'entrée utf-8 et les résultats très bien sans crachant de?.

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

(en supposant que la base de données est définie sur utf-8 et ne vous dérange pas de ne pas les filtrer si elles ne se transforment pas en? S)

(également en supposant que vous utilisez MySQL, autre les dbms ont probablement des fonctions similaires)

+0

Nous recevons cette entrée de l'utilisateur avant même qu'il ne touche la base de données. – zaf

Questions connexes