2010-10-12 5 views
1

J'ai quelques problèmes avec Html.Encode et les utilisateurs voulant utiliser des caractères spéciaux. Premièrement, les caractères sont remplacés par les codes html et ne sont donc pas affichés correctement. Et puis, si le texte est modifié ultérieurement et soumis de nouveau, une exception est levée lorsque ces codes html sont à nouveau soumis. Étant donné qu'il s'agit d'un site intranet et que la possibilité d'une attaque délibérée est presque inexistante, y a-t-il vraiment un risque à ne pas utiliser Html.Encode? Est-il possible que quelqu'un soumette par inadvertance des caractères spéciaux qui causent des problèmes?Est-il nécessaire d'utiliser Html.Encode pour un site interne?

Ou existe-t-il un meilleur moyen de contourner ce problème?

+0

Certains éléments à considérer: Quelles sont les conséquences si elles * faire * causer des problèmes? Quelles sont les chances que votre site interne soit un jour externalisé? Ou le code étant réutilisé sur un site externe? – Benjol

Répondre

1

Étant donné que c'est un site intranet et la possibilité d'une attaque délibérée est presque inexistante, est-il vraiment aucun risque pour ne pas utiliser Html.Encode

Oui, oui et oui encore. Il y a toujours un risque que quelqu'un entre des caractères spéciaux dans les champs de saisie. La règle d'or du développement web est de ne jamais faire confiance à l'utilisateur et de toujours encoder tout ce qui pourrait provenir d'une entrée utilisateur.

+0

Alors, comment puis-je afficher le texte entré au lieu des codes html? – fearofawhackplanet

+0

Par l'encodage Html: '<% = Html.Encode (" du texte pouvant contenir des caractères dangereux ")%>' ou dans ASP.NET 4.0 '<%:" du texte pouvant contenir des caractères dangereux "%>'. –

+0

Je suis confus ... c'est exactement ce que je fais, et je me retrouve avec mes boîtes de texte remplies de codes comme '°' au lieu du texte que l'utilisateur a saisi. Ces codes jettent alors une erreur s'ils sont soumis à nouveau. – fearofawhackplanet

0

Vérifiez partout où vous appelez Html.Encode car il semble que vous doublez vos chaînes de caractères (en encodant peut-être sur save et sur display ou en encodant sur un template/partial et en encodant à nouveau).

Et oui, encodez toujours vos cordes même si elles sont internes, sinon un employé mécontent pourrait causer de sérieux dommages.

0

Tout d'abord les caractères sont remplacés par les codes html et donc ne sont pas affichés correctement

Vous êtes à double codage. Vous voulez réellement Html.Encode pour afficher les balises HTML que l'utilisateur a entré du tout. À moins que vous ne vouliez réellement que des choses comme <ul><li> soient une liste à puces au lieu d'afficher les étiquettes.

Ensuite, si le texte est modifié ultérieurement et soumis de nouveau, une exception est levée lorsque ces codes html sont à nouveau soumis. Tout ce que vous avez fait pour permettre la soumission initiale de ceux-ci, fonctionnera pour permettre l'édition. Encore une fois, peut-être à cause du double codage, vous vous posez d'autres problèmes. Etant donné qu'il s'agit d'un site intranet et que la possibilité d'une attaque délibérée est presque inexistante, y a-t-il vraiment un risque à ne pas utiliser Html.Encode?

Au fond, vous savez déjà de cette façon de voir la sécurité est mauvaise;)

Questions connexes