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 字符串,而不是格式化的。

这是解决此问题的安全且正确的方法吗?可以改进吗?

感谢您的帮助。

【问题讨论】:

在这种情况下使用HtmlEncodeHtmlDecode 没有任何意义 @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 中的字符串如下所示:&amp;lt;p&amp;gt;Test &amp;lt;b&amp;gt;string &amp;lt;/b&amp;gt;with formatting.&amp;lt;/p&amp;gt; 我将视图修改为只进行编码:&lt;div class="summernote"&gt;@HttpUtility.HtmlEncode(@Model)&lt;/div&gt; 但是当我刷新页面时,我看到以下不是格式化的字符串:&amp;lt;p&amp;gt;Test &amp;lt;b&amp;gt;string &amp;lt;/b&amp;gt;with formatting.&amp;lt;/p&amp;gt; @... 自动编码。你不应该调用任何编码方法。 所以要澄清什么应该出现在数据库中?我应该看到&amp;lt;p&amp;gt;Test &amp;lt;b&amp;gt;string &amp;lt;/b&amp;gt;with formatting.&amp;lt;/p&amp;gt; 吗? 是的@b3hdad - 这是你应该存储的。 谢谢,所以我在做正确的事情。现在,如果我不做@Html.Raw 演示,那么我会看到 HTML 而不是格式化的字符串。我现在唯一关心的是,如果 Html.Raw 构成安全威胁?

以上是关于Html 编码/解码 & Html.Raw的主要内容,如果未能解决你的问题,请参考以下文章

在 Dart 中解码 HTML 编码的文本

python中对url编码解码处理

如何使用 Python/Django 执行 HTML 解码/编码?

python学习(二十八)URL编码和解码&签名规则需求练习

Python(17)_urllib下的parse的编码解码函数

Python-Url编码和解码