【问题标题】:How to handle encoded inputs that need to be edited?如何处理需要编辑的编码输入?
【发布时间】:2010-09-24 09:43:43
【问题描述】:

使用微软的 AntiXssLibrary,你如何处理需要稍后编辑的输入?

例如:

用户输入: <i>title</i>

保存到数据库中: <i>title</i>

在编辑页面上,它会在文本框中显示如下内容: <i>title</i> 因为我在文本框中显示之前已经对其进行了编码。

用户不喜欢这样。

写入输入控件时可以不编码吗?

更新:

我仍在努力解决这个问题。下面的答案似乎是在显示之前对字符串进行解码,但这不会允许 XSS 攻击吗?

一位用户说可以解码输入字段值中的字符串,但被否决了。

【问题讨论】:

    标签: html-encode antixsslibrary


    【解决方案1】:

    是的,输入框中的代码不会受到脚本攻击,并且不需要编码。

    【讨论】:

      【解决方案2】:

      您可以调用 HTTPUtility.HTMLDecode(MyString) 将文本恢复为未编码的形式。

      【讨论】:

      • 我面临的一个问题是我正在使用 AntiXssLibrary,它似乎没有 HtmlDecode 方法。不过我可能错了。
      【解决方案3】:

      您的问题似乎是双重编码; HTML 需要转义一次(因此它可以毫无问题地插入到页面上的 HTML 中),但两次会导致编码版本出现字面意思。

      【讨论】:

      • 当您将其插入输入字段以便用户可以编辑时会怎样?应该编码吗?
      【解决方案4】:

      看起来您不止一次对其进行编码。在 ASP.NET 中,使用 Microsoft 的 AntiXss 库,您可以使用 HtmlAttributeEncode 方法对不受信任的输入进行编码:

      <input type="text" value="<%= AntiXss.HtmlAttributeEncode("<i>title</i>") %>" />

      这会导致

      <input type="text" value="<i>title</i>" />
      在呈现页面的标记中,并在输入框中正确显示为<i>title</i>

      【讨论】:

        【解决方案5】:

        如果您允许用户输入将在网站上呈现的 HTML,您需要做的不仅仅是对其进行编码和解码。

        使用 AntiXss 通过将脚本和标记转换为文本来防止攻击。它不会对将直接呈现的“清理”标记做任何事情。您将不得不从用户输入中手动删除脚本标签等,以便在这种情况下得到完全保护。

        您需要去除合法元素上的脚本标签和 JavaScript 属性。例如,攻击者可以将恶意代码注入到 onclick 或 onmouseover 属性中。

        【讨论】:

        • 这是真的吗?我的印象是 AntiXSS 库是为这种情况制作的,因为 html.encode 不处理它。一位微软顾问甚至介绍了 AntiXSS 如何处理这个问题,而 html.encode 没有。关键是我们应该使用 AntiXSS。我想我需要对此进行测试。
        猜你喜欢
        • 2021-10-23
        • 1970-01-01
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 2015-06-11
        • 2022-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多