3

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

在这个应用程序中,用户有很多输入文本的可能性。
在用户信息、文件夹、组等。

一些用户想要命名不同的对象,例如Age < 20.
出现问题是因为 ASP.NET 会因为“<”而阻止此类输入以防止 javascript 注入。

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

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

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

HTML 也是如此:如果它的名称Folder<br>One应该看起来像:Folder<br>One而不像:
Folder
One

当然,我可以使用 HTML-Encode/-Decode,但我不想遍历整个项目并在输入或显示输入的任何地方添加编码/解码......
也将在未来的开发中伪装错误的全局解决方案。

那么问题又来了:有没有办法像处理文本一样处理每个文本?所有这些都尽可能全球化?

希望您能理解我的问题并知道任何可能性。

4

2 回答 2

0

如果您使用的是 JQuery,每当您将值设置为任何 span 或 div 时,

利用:

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

并且不要使用:

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

或者

    $('#myDiv').innerHTML='<script>alert("a")</script>';
于 2012-11-27T10:33:34.893 回答
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);
 }
于 2012-11-27T10:56:10.780 回答