【问题标题】:Handle every user input as plain text将每个用户输入作为纯文本处理
【发布时间】:2012-11-14 22:56:00
【问题描述】:

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

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

一些用户想要命名不同的对象,例如Age < 20
出现问题是因为 ASP.NET 会因为“

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

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

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

对于 HTML 也是如此:如果它命名为 Folder<br>One,它应该看起来像:Folder<br>One 而不是:
Folder
One

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

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

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

【问题讨论】:

  • 我没记错,当你使用DataBinding时,这是自动的
  • @SteveB 你能指定你的答案吗?我究竟应该 DataBind 什么?
  • 我的意思是,如果您在数据模板(DataList、Datagrid 等...)中有 <asp:Textbox>,并且如果您将文本框绑定到内部上下文对象,则编码/解码将是由数据绑定自动处理。
  • @SteveB 但我有很多控件,它们不在数据模板中。我也有一些,但也没有正确显示文本。

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


【解决方案1】:

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

用途:

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

不要使用:

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

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

【讨论】:

  • 我认为这不是他需要的解决方案:jsfiddle.net/a7URQ 并且无论如何都可以在没有 html 编码/解码和转义的情况下进行注入
【解决方案2】:

如果你不想使用 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);
 }

【讨论】:

  • 嗯,第一部分是我们用来关闭安全机制的部分。而对于第二个,我们必须通过完整的应用程序并将其添加到任何地方。我希望有一个更全球化的解决方案。
猜你喜欢
  • 2011-02-23
  • 2017-06-06
  • 2010-10-20
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多