2011-11-08 20 views
1

私はaspxページにテキストボックスを持っています。ユーザーは、テキストボックスにhtmlタグを入力する必要があります。これまでのところ、妥当性検査エラーを渡すことでわかっている唯一の方法は、ValidateRequestをfalseに設定することです。このテキストボックスにhtmlタグを受け入れる方法

<%@ Import Namespace="System.Web" %> 

     var tb = document.getElementById("<%=synopsisTextBox.ClientID%>"); 
     var value =Server.HtmlEncode(tb.value); 

のようにJavaScriptで (1)Server.HtmlEncodeを使用してしかし、私は、コンパイラのエラーを得た:私は、他のいくつかの方法を試してみました。私が間違ったことを誰かに教えてもらえますか?

(2)自分のエンコード機能を作成する

function escapeHTML (str) 
{ 
    var div = document.createElement('div'); 
    var text = document.createTextNode(str); 
    div.appendChild(text); 
    return div.innerHTML; 
} 

何とかそれは非常にうまく動作しませんでした。同じページのポストバックを引き起こすボタンをクリックすると、スタックされてしまいます。

あなたのテキストボックスにhtmlタグを受け入れるより良い方法があるかどうか誰にでも教えてください。ありがとう。

+1

なぜこのテキストボックスにhtmlタグを入力したいのですか?適切な解決策は、何をしようとしているかによって異なります。信頼できないユーザーにこのテキストボックスが表示されるようになると、データがどのように消され、エンコードされるのかを慎重に考える必要があります。 – Ian

+0

私たちはこれを社内ユーザーのためのツールとして構築しています。 – GLP

+0

あなたは問題を解決しましたか?私の解決策を試しましたか? –

答えて

4

入力確認(ページのみ)を無効にして、ページ内の他のテキストボックスからの入力をエンコードするようにしてください。入力検証は、これまで無効にするべきではなく、あなたが何をしているのかを明示して明示的に行う必要があるため、デフォルトでオンになっています。このようにして、注意を払い、独自の入力検証を実行してください。

+1

+1正確に - 要求の検証を無効にすることに何も問題はありません。あなたを守るために、デフォルトでオンになっています。それをオフにするだけで、ASP.NETに言っている "私は何をやっているのか分かっていますか?" –

0

IMO、あなたはこれらの次のソリューションがあります。

  • フォロー@StilgarをしてもエンコードにアンチXSSを使用しています。
  • HTMLの代わりにTextileまたはBBCodeマークアップ言語を使用します。
1

あなたはエンコードhtmlタグに必要とブラウザ上に表示される場合

<%= Server.HTMLEncode("The paragraph tag: <P>") %> 

は、次の出力を生成することを覚えておいてください:Webブラウザで表示されます

The paragraph tag: &lt;P&gt; 

として:

The paragraph tag: <P> 

Server.HTMLEncodeを使用した試用は、データがサーバー上にあるときに機能し、ブラウズに送信する前にエンコードする必要があるため動作しません。あなたのサンプルでは、​​ブラウザにデータがあり、リクエストはサーバーで受信される前に検証時にブロックされます


あなたはユーザーがテキストボックスを編集し、

<%@ Page validateRequest="false" ...> 

を介して、またはあなたの全体のアプリケーションのweb.configでこれを無効にすることができ HTMLタグ入力します:

<system.web> 
    <page validateRequest="false" /> 
</system.web> 

このValidateRequestプロパティは、 の理由がないと存在しないことに注意してください。デフォルト値を変更すると、安全でない入力は になります。悪質な のJavaScript、ActiveXの、FlashやHTML


の挿入のような別のスマートな解決策ではJavaScriptを経由して交換するにあるそのため、あなたは、 回避クロスサイトスクリプティング攻撃へのすべてのユーザーの入力を検証する必要がありますユーザーによって書かれたテキストは、検証のために安全です。
< tag>の代わりに、<tag>が安全とみなされます。

function validateTxt() { 
    $("textarea, input[type='text']").change(function() { 
     html = $(this).val(); //get the value 
     //.replace("a" , "b") works only on first occurrence of "a" 
     html = html.replace(/< /g, "<"); //before: if there's space after < remove 
     html = html.replace(/</g, "< "); // add space after < 
     $(this).val(html); //set new value 
    }); 
} 

$(document).ready(function() { 
     validateTxt(); 
}); 
+0

JavaScriptで悪質なコードをチェックしてはいけません。これは簡単に回避できます。この検証はサーバー上で行う必要があります。 –

+0

@ RyanM JavaScriptの悪意のあるコードをチェックしていません。サーバー側の検証を維持するために、クライアント側を削除しています!だから、javascriptを取得しようとすると、サーバー上でブロックされます... –

関連する問題