【问题标题】:How to handle Html inputs in the TextBox如何处理 TextBox 中的 Html 输入
【发布时间】:2010-02-20 18:45:09
【问题描述】:

我要求用户可以在 ASP.NET 文本框中输入 HTML 标记。文本框的值将保存在数据库中,然后我们需要显示它 在其他页面上,他输入了什么。为此,我在 Page 指令上设置了 ValidateRequest="false"。 现在的问题是,当用户输入以下内容时:

<script> window.location = 'http://www.xyz.com'; </script>

现在它的值保存在数据库中,但是当我在其他页面中显示它的值时,它会将我重定向到"http://www.xyz.com",这很明显 当 javascript 捕获它时。但我需要找到解决方案,因为我需要准确显示他输入的内容。 我正在考虑 Server.HtmlEncode。你能引导我找到我的要求的方向吗

【问题讨论】:

  • 跨站点脚本可能会很麻烦。 rockinthesixstring 有一个很好的建议:使用像 Telerik 的商业 HTML 编辑器(DevExpress 也提供了一个)。祝你好运,记住最好总是表现得好像你期望有人尝试跨站点脚本或 SQL 注入攻击。希望他们不会(或假设他们不会因为他们是“你的”用户)只是不会削减它。

标签: c# asp.net html


【解决方案1】:

始终始终对来自用户的输入进行编码,然后才将其保留在您的数据库中。您可以通过

轻松实现此目的
Server.HtmlEncode(userinput) 

现在,当需要向用户显示内容时,解码用户输入并将其放在屏幕上:

Server.HtmlDecode(userinput)

【讨论】:

    【解决方案2】:

    您需要在将所有输入输出回用户之前对其进行编码,并且您可以考虑实施基于白名单的方法来允许用户提交哪种 HTML。

    我建议使用白名单方法,因为编写规则以允许 p、br、em、strong、a(例如)比尝试识别每种恶意输入并将它们列入黑名单要容易得多。

    可能考虑使用 MarkDown 之类的东西(在 StackOverflow 上使用)而不是允许纯 HTML?

    【讨论】:

    • @Adam:我不想限制用户,他们可以在文本框中输入任何html标签
    【解决方案3】:

    在生成 HTML 时需要转义一些字符:'&lt;' -&gt; &amp;lt;'&gt;' -&gt; &amp;gt;'&amp;' -&gt; &amp;amp;。这样您就可以准确地显示用户输入的内容,否则 HTML 解析器可能会识别 HTML 标记并执行它们。

    【讨论】:

      【解决方案4】:

      您是否尝试过在所有输入中使用HTMLEncode?我个人使用Telerik RadEditor 在提交字符之前对其进行转义...这样系统就不会出现异常。

      这里有一个 SO question 类似的内容。

      【讨论】:

        【解决方案5】:

        你应该看看你不想支持的HTML tags,因为你描述的漏洞,比如

        • 脚本

        • img

        • iframe

        • 小程序

        • 对象

        • 嵌入

        • 表单、按钮、输入

        并将开头的“

        同时替换

        猜你喜欢
        • 2015-08-13
        • 2022-06-15
        • 1970-01-01
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        相关资源
        最近更新 更多