2010-01-27 3 views
2

Je programme un enregistrement d'utilisateur. Cependant, j'ai trouvé un caractère limitant à 'nom d'utilisateur' à partir des exemples de codes, tels que '.', '' ',' - 'sont acceptés, pas d'espace ou autre espace vide, etcpourquoi faire une inscription d'utilisateur doit être régulier?

Ces restrictions sont-elles nécessaires? J'utilise MySQL + PHP. Si j'adopte plusieurs manières suivantes:

  1. modifier le classement de la colonne « utf8_general_ci »; Tirez la fonction 'mysql_escape_string' ou 'mysql_real_escape_string' vers PHP;
  2. créer une table de relations sur le nom d'utilisateur < -> userID (le 'nom d'utilisateur' est ce que l'entrée du client, userID est un nombre INT.). Il suffit d'utiliser 'userID' dans la base de données, mais 'username' ne s'affiche que dans les HTML.

Ai-je vraiment besoin d'une expression régulière?

Nous vous remercions de votre aide.


PS: Je suis chinois, donc les caractères chinois sont obligatoires.

Répondre

1

Puisqu'il s'agit d'une application Web, en dehors de l'utilisation de mysql_real_escape_string, je recommanderais également de supprimer ou d'interdire tout ce qui peut construire du HTML. Généralement interdisant "<" et ">" est suffisant.

Vous vraiment ne voudrais pas que certains utilisateurs d'entrer leur nom:

<script src=http://malicious/script.js></script>

La solution alternative consiste à utiliser htmlspecialchars lors de la sortie des données sur votre page.

0

il est à vous, mais en utilisant mysql_real_escape_string devrait être bon à mon avis (et je suis assez paranoïaque)

1

Ces restrictions ne sont pas neccessary, mais vous devez vous assurer que le nom d'utilisateur est un valide et unique chaîne (avec ou sans regex)

quand il vient à stripping caractères vulnérables de chaînes et injection mysql je vous conseille d'utiliser Mysqli extension pour les commandes préparées, qui prend soin d'échapper et vous ne devez pas échapper à tous les chaîne manuellement

Questions connexes