【发布时间】: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 不会造成任何安全威胁?
标签: c# asp.net-mvc entity-framework asp.net-mvc-5 summernote