【问题标题】:Is there any need to use Html.Encode for an internal site?内部站点是否需要使用 Html.Encode?
【发布时间】:2011-04-24 04:43:48
【问题描述】:

Html.Encode 和想要使用特殊字符的用户遇到了一些问题。首先,字符被 html 代码替换,因此无法正确显示。然后,如果文本稍后被编辑并重新提交,当这些html代码被重新提交时会抛出异常。

鉴于这是一个内部网站,几乎不存在蓄意攻击的可能性,不使用Html.Encode真的有风险吗?是否有可能有人会无意中提交一些导致问题的特殊字符?

或者有没有更好的方法来解决这个问题?

【问题讨论】:

  • 一些需要考虑的因素:如果他们'引起问题'会有什么后果?您的内部网站有一天被外部化的可能性有多大?还是在外部网站上重复使用的代码?

标签: asp.net-mvc xss security html-encode


【解决方案1】:

鉴于这是一个 Intranet 站点 以及故意的可能性 攻击几乎不存在,是 确实有不使用的风险 Html.Encode

是的,是的,又是的。有人在输入字段中输入特殊字符总是有风险的。 Web 开发的黄金法则是永远不要相信用户输入,并且总是对可能来自用户输入的任何内容进行编码。

【讨论】:

  • 那么我怎样才能显示输入的实际文本而不是 html 代码?
  • 通过 Html 编码:<%= Html.Encode("some text that might contain dangerous characters") %> 或 ASP.NET 4.0 <%: "some text that might contain dangerous characters" %>
  • 我很困惑......这正是我正在做的事情,我的文本框里充满了° 之类的代码,而不是用户输入的实际文本。如果重新提交这些代码,则会引发错误。
  • 你是如何生成这些文本框的?你在使用 html 助手吗?
  • @Darin,是的,他们是 MVC html 助手
【解决方案2】:

检查您调用 Html.Encode 的所有位置,因为这听起来好像您在对字符串进行双重编码(可能在保存和显示时编码或在模板/部分上编码并再次编码)。

是的,即使是内部字符串,也要始终对字符串进行编码,否则一名心怀不满的员工可能会造成严重损害。

【讨论】:

    【解决方案3】:

    首先字符被html代码替换,因此无法正常显示

    你是双重编码。您实际上希望 Html.Encode 显示用户输入的 HTML 标记。除非你真的希望像 <ul><li> 这样的东西是一个项目符号列表而不是显示标签。

    然后,如果文本稍后被编辑并重新提交,则在重新提交这些html代码时会抛出异常。

    无论您为允许最初提交这些内容所做的一切,都将允许编辑。同样,可能是由于双重编码,您会遇到更多问题。

    鉴于这是一个内部网站,几乎不存在蓄意攻击的可能性,不使用 Html.Encode 真的有风险吗?

    内心深处你已经知道看待安全的方式是错误的;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2021-08-29
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多