2009-03-04 5 views
5

私は、ユーザーがテキストを入力できるASP.NET MVCアプリケーションにテキストエリアを持っています。ユーザーにテキストを表示すると、私はHtml.Encodeを使用して悪質な入力を防止します。問題は、ユーザーがスペイン語で入力でき、añoと入力してEncodeと入力するとa&#241oに変換されるということです。どうすればこれを防ぐことができますか?セキュリティのためにHTML入力をエンコードする場合、Ñやñなどの国際文字のエンコードを避けるにはどうすればよいですか?

EDIT:最初はこれを発生させる

<b>a1 'a1' Cama&#241;o</b> 

:その後、私はこれを持って、この時間は、ディスプレイが正しいページで

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a> 

:生成されたHTMLでは、私はこれを見ます方法:

<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %> 

と、このような二:

<%= Html.Encode(Model.NAME)%> 

私の推測では、問題はHtml.RouteLinkであるということです。

+0

国際的な文字をエンコードしているという苦情や、入力した文字ではなくエンコードされた文字が表示されるという苦情はありますか?それが後者の場合、「2度の誤ってエンコーディングする」という答えは正しいです。そうでなければ、私たちに知らせてください。 – Eddie

答えて

2

だから私の推測では、問題がHtml.RouteLink

うんであるということです。 RouteLinkに入るパラメータをHTMLエンコードすることは想定されていません.HTML自体を生成するので、エスケープしてくれます。

5

を2回に誤ってエンコードしていますか?

たとえば、サーバー側でTextareaのコンテンツをプログラムで設定すると、レンダリング時に自動的にコンテンツがエンコードされます。

textareaの生のHTML出力を見てみてください。

通常、エスケープをテキストエリアの内容の中に置くと、デコードされたテキストエリア(エスケープされていないエスケープされた文字として表示)にエスケープが表示されます。

誤ってHtml.Encodeを2回間違いの問題にする可能性があります。

データが既にエスケープされている場合は、テキストエリアに配置する前にエスケープ解除(Html.Decode)したいことがあります。

+0

ここでも同じ考えがあります。 +1 – Tomalak

+0

それを見た。まだ適用されますか? – chakrit