代码之家  ›  专栏  ›  技术社区  ›  Vijjendra

如何处理文本框中的HTML输入

  •  0
  • Vijjendra  · 技术社区  · 16 年前

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

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

    现在它的值保存在数据库中,但是当我在其他页面中显示它的值时,它会将我重定向到 "http://www.xyz.com" 这很明显 当javascript捕获它时。但我需要找到一个解决方案,因为我需要确切地显示他输入了什么。 我在考虑server.htmlencode。你能为我的要求指引方向吗

    5 回复  |  直到 14 年前
        1
  •  1
  •   azamsharp    16 年前

    总是总是对来自用户的输入进行编码,然后只保存在数据库中。你可以很容易地做到这一点

    Server.HtmlEncode(userinput) 
    

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

    Server.HtmlDecode(userinput)
    
        2
  •  1
  •   Adam Taylor    16 年前

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

    我建议使用白名单方法,因为编写允许P、BR、EM、STRONG、A(例如)的规则要容易得多,而不是尝试识别各种恶意输入并将其列入黑名单。

    可能考虑使用诸如markdown(在stackoverflow中使用)之类的东西,而不允许使用纯HTML?

        3
  •  0
  •   Vlad    16 年前

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

        4
  •  0
  •   Community Mohan Dere    9 年前

    你试过用吗 HTMLEncode 你所有的投入?我个人使用 Telerik RadEditor 在提交字符之前会先转义这些字符…这样系统就不会在异常情况下死记硬背。

    这里有一个 SO question 沿着同一条线。

        5
  •  0
  •   devio    16 年前

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

    • 脚本

    • IMG

    • iframe名称

    • 小应用程序

    • 对象

    • 嵌入

    • 窗体、按钮、输入

    并将前导“<”替换为“&lt;”。

    同时替换</body>和</html>

    HTML编辑器(如ckeditor)允许您需要格式良好的XHTML,以及 define tags 从输入中排除。