2011-01-03 13 views
1

JavaScript(クライアント側)でHTMLエンコードを必要とするReqeust.Validationを迂回するようにTextBoxからString(ユーザーがHTMLタグを挿入できる場所)が必要です。JavaScriptで文字列をエンコードする

Javascriptは、文字列をエンコードし、ラベルにエンコードして表示する必要があります。

 <asp:TextBox ID="uxValueInput" runat="server"></asp:TextBox> 
     <br /> 
     <asp:Label ID="uxResultEncoded" runat="server" Text="Label"></asp:Label> 
     <asp:Button ID="uxEncodeButton" runat="server" Text="Button" /> 

私はJavaScriptで新しく、ウェブ上では別のスクリプトを試しましたが、成功しませんでした。 本当に簡単な例を投稿して、私はどのように動作するのか理解できるでしょうか?ありがとう!

+2

Do not。一貫した方法でエンコードする必要がある場合は、完全に制御できるサーバーで行います。 ASP.NETはあなたがそれをやり遂げるのを防ぐのに十分なほど悪くありません。 – Quentin

+0

何でエンコードしますか? – deceze

+0

申し訳ありませんが、私は文字列をHTMLエンコードする必要があります! – GibboK

答えて

3

私はDavid Dorlandと一緒です:このクライアントサイドではなく、要求の検証(here's an article saying how)を無効にしてください。しかし、もしあなたがそれを行うなら、でもAnti-XSSまたは類似のライブラリを使用して、ASP.Netがあなたを守ろうとしていることを正確に防止してください。

あなたがクライアント上で最小限 HTMLエンコードを行うための本物のユースケースを持っている場合は、あなたがこれを行うことができます:

var escapes = { 
    '<': '&lt;', 
    '>': '&gt;', 
    '&': '&amp;' 
}; 
var raw = "Hi, I'm an <scr" + "ipt src='http://evil.example.com/attack.js'><\/script> evil & malicious attack."; 
var encoded = raw.replace(/[<>&]/g, function(m) { 
    return escapes[m]; 
}); 

Live example

ここではそれがどのように動作するかです:

  1. マップには、生の文字をHTMLエンティティにマップするescapesというマップがあります3210〜&lt;など)。
  2. 生の文字列には悪意のあるスクリプトがあります。
  3. と正規表現を使用して、すべて<,>、および&の文字を検索し、それらを同等のエンティティに置き換えます。関数をString#replaceに2番目の引数として渡すと、一致するたびに呼び出され、戻り値が置換として使用されます。正規表現/[<>&]/gは、 "<,>、または&をグローバルにgフラグ)の文字列内で検索することを意味します。
+0

ありがとうT.J.私はリクエストの検証を無効にすることはできません.JavascriptでENCODE HTMLが必要です。あなたはそれをする方法を知っていますか?それはかなり簡単になるはずですが、私はあなたの助けが必要なので、私は決してJavaScriptを一度もやっていません:-) – GibboK

+0

@GIbboK:非常に基本的な例を追加しました。 –

+0

ありがとうございました – GibboK

関連する問題