【发布时间】:2019-03-12 16:03:13
【问题描述】:
这是一个很难解释的问题,所以请多多包涵。我正在使用使用 ASP.NET HttpUtility.HtmlEncode() 方法的服务器端编码和使用 jsRender 的客户端编码的组合(顺便说一句很棒的渲染库。)
当我自己使用其中任何一个时,它都可以正常工作。字符< 将变为<,但它仍会在浏览器中显示为<,这很好,因为有时存在使用这些字符并且需要正确显示给用户的合法情况,但不是由浏览器。
问题是,当我对服务器端进行编码,然后在客户端对相同的字符串进行编码时,它现在会在浏览器中显示编码的字符串。您可能会问自己,为什么我要在这两个地方都这样做。这样做的原因是我更喜欢在服务器端做,但我也喜欢把客户端放在那里,以防开发人员忘记在服务器端做,反之亦然,以防万一。
有没有办法让它在两个地方都进行编码,并且仍然让它在浏览器中显示为未编码的字符串?
【问题讨论】:
-
一种方法是验证字符串以确定它是否有编码的单词 (ampLt;);但是,我认为从架构的角度来看,最好的故障保护是提供一个好的 API 文档。扪心自问,您是否真的要为这种故障安全功能牺牲处理速度?
-
在浏览器中使用
:field,在服务器上使用>field
标签: javascript asp.net-mvc-4 xss html-encode jsrender