【问题标题】:How to prevent client side HTML encoding with jsRender from encoding already encoded string from server如何防止使用 jsRender 的客户端 HTML 编码对来自服务器的已编码字符串进行编码
【发布时间】:2019-03-12 16:03:13
【问题描述】:

这是一个很难解释的问题,所以请多多包涵。我正在使用使用 ASP.NET HttpUtility.HtmlEncode() 方法的服务器端编码和使用 jsRender 的客户端编码的组合(顺便说一句很棒的渲染库。)

当我自己使用其中任何一个时,它都可以正常工作。字符< 将变为<,但它仍会在浏览器中显示为<,这很好,因为有时存在使用这些字符并且需要正确显示给用户的合法情况,但不是由浏览器。

问题是,当我对服务器端进行编码,然后在客户端对相同的字符串进行编码时,它现在会在浏览器中显示编码的字符串。您可能会问自己,为什么我要在这两个地方都这样做。这样做的原因是我更喜欢在服务器端做,但我也喜欢把客户端放在那里,以防开发人员忘记在服务器端做,反之亦然,以防万一。

有没有办法让它在两个地方都进行编码,并且仍然让它在浏览器中显示为未编码的字符串?

【问题讨论】:

  • 一种方法是验证字符串以确定它是否有编码的单词 (ampLt;);但是,我认为从架构的角度来看,最好的故障保护是提供一个好的 API 文档。扪心自问,您是否真的要为这种故障​​安全功能牺牲处理速度?
  • 在浏览器中使用:field,在服务器上使用>field

标签: javascript asp.net-mvc-4 xss html-encode jsrender


【解决方案1】:

我最终通过使用自定义渲染函数创建自己的自定义 jsRender 标记来解决这个问题,该函数检查字符串是否已经编码,如果是,它将不理会它,否则它将对其进行编码。

这里是创建自定义标签的链接jsRedner Custom Tags Documentation

【讨论】:

  • 您也可以创建一个custom converter{{smartEncode: ...}},仅在尚未编码时才进行编码...
  • 感谢@BorisMoore。顺便说一句,jsRender 的工作很棒,我喜欢它!我实际上最终制作了一个自定义模板标签,但是使用自定义转换器来做这件事有什么好处吗?
  • 谢谢!对于您的问题,不,不是真的,您可以根据您的使用模式等选择标签或转换器。两者都可以正常工作,具有相似的性能等......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多