Html Encoding/Decoding & Html.Raw
Html Encoding/Decoding & Html.Raw
我听说不建议在 Razor 视图中使用 HTML.Raw,如果是这样我会遇到问题。
我正在使用 Entity Framework 与我的 SQL 数据库进行交互。我也在使用 SummerNote 作为前端编辑器。
现在我的视图代码在 @{ } 块中,我相信它做了一些 encoding/decoding.
场景是用户在 SummerNote 编辑器中输入一些文本并应用一些格式(例如,将单词设为粗体)并单击保存。这将生成一个 HTML 字符串并将其传递给我的控制器:
<p>Test <b>string </b>with formatting.</p>
在controller中,我用HTMLencode来编码:
customerData.Description = HttpUtility.HtmlEncode(summerNoteFieldData);
然后发送到数据库。在数据库中看起来像以下内容:
<p>Test <b>string </b>with formatting.</p>
然后在呈现它的视图中,我做:
<div class="summernote">@Html.Raw(@HttpUtility.HtmlDecode(@Model))</div>
因此,如果我删除 Html.Raw,那么我将看到上面的 HTML 字符串,而不是格式化字符串。
这是解决此问题的安全正确方法吗?可以改进吗?
感谢您的帮助。
您应该 HTML 在视图中打印时进行编码(使用 @Model
)。
不要在其他任何地方编码或解码;不要将编码内容存储在您的数据库中。
我听说不建议在 Razor 视图中使用 HTML.Raw,如果是这样我会遇到问题。
我正在使用 Entity Framework 与我的 SQL 数据库进行交互。我也在使用 SummerNote 作为前端编辑器。
现在我的视图代码在 @{ } 块中,我相信它做了一些 encoding/decoding.
场景是用户在 SummerNote 编辑器中输入一些文本并应用一些格式(例如,将单词设为粗体)并单击保存。这将生成一个 HTML 字符串并将其传递给我的控制器:
<p>Test <b>string </b>with formatting.</p>
在controller中,我用HTMLencode来编码:
customerData.Description = HttpUtility.HtmlEncode(summerNoteFieldData);
然后发送到数据库。在数据库中看起来像以下内容:
<p>Test <b>string </b>with formatting.</p>
然后在呈现它的视图中,我做:
<div class="summernote">@Html.Raw(@HttpUtility.HtmlDecode(@Model))</div>
因此,如果我删除 Html.Raw,那么我将看到上面的 HTML 字符串,而不是格式化字符串。
这是解决此问题的安全正确方法吗?可以改进吗?
感谢您的帮助。
您应该 HTML 在视图中打印时进行编码(使用 @Model
)。
不要在其他任何地方编码或解码;不要将编码内容存储在您的数据库中。