2010-06-07 4 views
1

Je suis actuellement codé html tout le texte entré par l'utilisateur avant d'insérer/mettre à jour un enregistrement de table DB. Le problème est que sur les mises à jour ultérieures, la chaîne précédemment encodée est réencodée. Cette boucle sans fin commence à manger beaucoup d'espace de colonne dans mes tables. J'utilise des requêtes paramétrées pour toutes les instructions sql mais je me demande s'il serait prudent de laisser le .NET Framework gérer cette partie sans le codage HTML?Encodage HTML avec ASP.NET

Répondre

4

Je ne recommande pas de coder les données dans la base de données.

Le codage n'a rien à voir avec les données mais il est spécifiquement ciblé sur la façon dont vous affichez les données. Que se passe-t-il si vous voulez qu'une application cliente utilise ces données dans le futur ou dans un autre affichage non HTML?

Vous devez stocker les données en tant que données brutes dans vos tables et applications, ou la couche que les applications de services doivent gérer l'encodage selon les formats requis.

Le framework .NET peut facilement le faire pour vous. N'oubliez pas d'utiliser HtmlEncode ou ASP.NET 4 <%:. Vous devriez le faire pour TOUTES les données que vous devez présenter qui sont dynamiques.

Le stocker dans la base de données encodée ne vous causera pas seulement des problèmes aujourd'hui mais en cours dans le futur.

+0

Tout d'abord, merci pour la réponse. Ma préoccupation concerne principalement les champs de texte multilignes. Sur la base de ce que vous dites, je ne devrais encoder que ce que je montre à l'utilisateur final et non à la table db. Aurais-je alors décoder la valeur d'une zone de texte avant de la mettre à jour dans la table db? – Corin

+0

@Corin Si les données de la base de données ne sont pas déjà codées, vous n'avez rien à faire. Stockez-le tel quel. Lorsque vous l'affichez dans votre code HTML, vous faites tout le codage pour lui donner un aspect correct et remplacer les sauts de ligne. Traitez-vous des données qui sont déjà encodées et maintenant vous devez vous en occuper ou pouvez-vous vous assurer qu'aucune donnée encodée ne se retrouve dans votre base de données? – Kelsey

+0

J'ai apparemment inversé le processus d'encodage. Signification que j'ai encodée avant de l'enregistrer dans les tables de db. Le problème que j'essaie de résoudre dans les injections de script. Je sais que je peux laisser le .NET Framework les attraper mais j'essayais d'y ajouter une autre couche. À ce stade, je peux entrer dans mon code et le réparer. Je me demande simplement si je code une valeur de chaîne et la place dans une zone de texte, devrais-je la décoder avant de réenregistrer cette valeur de textarea dans la table. – Corin

5

Vous devez toujours encoder les données utilisateur HTML sur en affichant, jamais sur en mémorisant. Enregistrez l'entrée de l'utilisateur dans la base de données (en utilisant des requêtes paramétrées ou autres pour empêcher l'injection SQL), puis le codage HTML lors de la sortie des données. De cette façon, vous n'aurez jamais ce problème.

Le codage HTML est simplement intégré dans le framework ASP.NET. Voici comment vous le faites:

<!-- ASP.NET 3.5 and below --> 
<%= Html.Encode(yourStuff) %> 

<!-- ASP.NET 4 --> 
<%: yourStuff %> 
+0

Merci pour la réponse rapide. Aurais-je alors décoder la chaîne déjà encodée avant de mettre à jour l'enregistrement en cours que je visualise? – Corin

+0

@Corin, En fait, je pense que la meilleure option (quoique peut-être pas la plus simple * en ce moment *) est de "désinfecter" votre base de données à partir de données codées, et d'essayer de restaurer les entrées brutes. De cette façon, vous ne devrez pas vous inquiéter à ce sujet à l'avenir. –

0

vous pouvez enregistrer l'entrée avec encode, et au moment de décodage de mise à jour, il puis mettre à jour et l'enregistrer à nouveau en utilisant encode et au moment de l'émission ne ont pas besoin pour faire quoi que ce soit ... cela va donner un avantage .. ne pas besoin d'encoder encore et encore au moment du spectacle ... mais un problème peut-être que vous voulez changer à rowdatabound alors vous devez décoder puis changer et coder à nouveau :) :) codage heureux