Html 编码/解码 & Html.Raw
Posted
技术标签:
【中文标题】Html 编码/解码 & Html.Raw【英文标题】:Html Encoding/Decoding & Html.Raw 【发布时间】:2018-12-12 07:53:10 【问题描述】:我听说不建议在 Razor 视图中使用 html.Raw,如果是这样我就有问题了。
我正在使用实体框架与我的 SQL 数据库进行交互。我也使用 SummerNote 作为前端的编辑器。
现在我的视图代码在 @ 块中,我相信它会进行一些编码/解码。
场景是用户在 SummerNote 编辑器中输入一些文本并应用一些格式(例如将单词加粗)并单击保存。这将生成一个 HTML 字符串并将其传递给我的控制器:
<p>Test <b>string </b>with formatting.</p>
在控制器中,我使用 HTML encode 进行编码:
customerData.Description = HttpUtility.HtmlEncode(summerNoteFieldData);
然后将其发送到 DB。在 DB 中如下所示:
<p>Test <b>string </b>with formatting.</p>
然后在视图中呈现它时,我这样做:
<div class="summernote">@Html.Raw(@HttpUtility.HtmlDecode(@Model))</div>
因此,如果我删除 Html.Raw,我将看到上面的 HTML 字符串,而不是格式化的。
这是解决此问题的安全且正确的方法吗?可以改进吗?
感谢您的帮助。
【问题讨论】:
在这种情况下使用HtmlEncode
和HtmlDecode
没有任何意义
@StephenMuecke,感谢您的回复。我也这么认为,我删除了它们。现在,如果我只使用@Model
打印,那么它将打印 HTML。为了打印格式化的字符串,我必须将其包装在@Html.Raw
中。我不知道如何解决这个问题?
但是你的问题是什么?使用@Html.Raw()
是正确的。
哦是吗?这就是我想要弄清楚的。那么使用 Html.Raw 不会造成任何安全威胁?
以Store and display HTML string while avoiding JS, in ASP.Net Core 2为例
【参考方案1】:
您应该在视图中打印时进行 HTML 编码(使用 @Model
)。
不要在其他任何地方编码或解码;不要在数据库中存储编码内容。
【讨论】:
感谢您的回复。删除控制器中的 Html.Encode 后,DB 中的字符串如下所示:&lt;p&gt;Test &lt;b&gt;string &lt;/b&gt;with formatting.&lt;/p&gt;
我将视图修改为只进行编码:<div class="summernote">@HttpUtility.HtmlEncode(@Model)</div>
但是当我刷新页面时,我看到以下不是格式化的字符串:&lt;p&gt;Test &lt;b&gt;string &lt;/b&gt;with formatting.&lt;/p&gt;
@...
自动编码。你不应该调用任何编码方法。
所以要澄清什么应该出现在数据库中?我应该看到&lt;p&gt;Test &lt;b&gt;string &lt;/b&gt;with formatting.&lt;/p&gt;
吗?
是的@b3hdad - 这是你应该存储的。
谢谢,所以我在做正确的事情。现在,如果我不做@Html.Raw 演示,那么我会看到 HTML 而不是格式化的字符串。我现在唯一关心的是,如果 Html.Raw 构成安全威胁?以上是关于Html 编码/解码 & Html.Raw的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python/Django 执行 HTML 解码/编码?
python学习(二十八)URL编码和解码&签名规则需求练习