将每个用户输入处理为纯文本

时间:2012-11-27 10:30:48

标签: c# javascript asp.net .net html

我们有一个非常大的网络应用程序 总共约120,000行。

在此应用程序中,用户有足够的可能性输入文本 在用户信息,文件夹,组等中。

有些用户想要命名不同的对象,例如Age < 20 有一个问题,因为ASP.NET阻止了这样的输入,因为&#34;&lt;&#34;防止javascript注入。

我们找到了关闭这些安全机制的方法,但现在我们的应用程序是不安全的。

所以问题是:
是否有任何设置或属性或任何可以设置为全局的(在整个应用程序的某一点)应用程序处理此类输入作为纯文本?

因此,当用户例如想要命名文件夹<script>alert("ALERT");</script>时,它应该以这种方式命名,并且显示为<script>alert("ALERT");</script>,但脚本将不会执行。

对于HTML也是如此:如果它的名称为Folder<br>One,它应该如下所示:Folder<br>One而不是: Folder
One

当然我可以使用HTML-Encode / -Decode,但我不想通过整个项目并在输入或显示的任何地方添加编码/解码...
全球解决方案也会在未来的发展中出现错误。

问题再说一遍:有没有办法处理每个文本,就像文本一样?那些尽可能全球化的东西?

希望你能理解我的问题并了解任何可能性。

2 个答案:

答案 0 :(得分:0)

如果您使用的是JQuery,那么无论何时将值设置为任何span或div,

使用:

$('#myDiv').text('<script>alert("a")</script>');

不要使用:

    $('#myDiv').html('<script>alert("a")</script>');

    $('#myDiv').innerHTML='<script>alert("a")</script>';

答案 1 :(得分:0)

如果你不想使用HTML编码解码而不是试试ValidateRequest="false"你可以像下面的代码那样:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" ValidateRequest="false" Inherits="_Default" %>

您可能想要使用的另一种技术如下......

<script>
      function Encode() {
       var value = (document.getElementById('TextBox1').value);
       value = value.replace('<', "&lt;");
       value = value.replace('>', "&gt;");
       document.getElementById('TextBox1').value = value;
      }
 </script>

</head>
<body>
 <form id="form1" runat="server">
 <asp:TextBox ID="TextBox1"  runat="server"></asp:TextBox>
 <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="Encode()" />
 </form>

服务器端

protected void Page_Load(object sender, EventArgs e)
 {
  this.TextBox1.Text = Server.HtmlDecode(this.TextBox1.Text);
 }