【发布时间】:2020-04-16 09:25:56
【问题描述】:
序言
我的用例包括一个前端所见即所得的编辑器。从 CSHTML 前端视图中获取 HTML5/CSS 格式的用户输入。通过 POST 请求接收后端控制器操作中的输入。最后用它做一些花哨的数据库。
听起来很简单。使用 editor 这个野兽,它非常简单且可自定义。
查看
WYSIWYG 编辑器 textarea 嵌套在 form 中,使用 POST 发送编辑器的原始 HTML 数据
<form class="form" asp-controller="CreationController" asp-action="CreateSnowflakeBlogpost" method="post">
<button type="submit" class="btn btn-link">Submit Snowflake Blogpost</button>
<textarea name="snowflakeHtmlContent" id="joditEditor"> </textarea>
</form>
控制器
控制器的动作接收POST参数。
[HttpPost]
public async Task<IActionResult> CreateSnowflakeBlogpost(string snowflakeHtmlContent)
{
// store HTML content in DB and do fancy operations
// redirect to something else
return RedirectToAction("PreviewSnowflakeBlogpost");
}
问题
HTML5/CSS 标签在传递 POST 数据时会丢失。经检查,它们从视图成功发送。 Action 的参数虽然数据不正确。
看起来这里正在进行清理,去除我们想要故意保留的 HTML 标记的 POST 参数。
看起来有可能的解决方案。
-
[Request.Unvalidated]注释。 Deprecated. -
[AllowHtml]注释。已弃用。请参阅here 和here。 -
@Html.Raw(theString)here 但它用于将不安全的数据从 Controller 传递到 View。我们的用例正好相反。 - This question 有前面几点的汇编。一切都不起作用。
问题
如何将原始 HTML/CSS 数据从 View 传递到 Action?满足以下条件:
标记没有数据丢失。
防止存在 XSS 风险的不安全数据。根据guidelines。
【问题讨论】:
标签: asp.net-core asp.net-core-mvc wysiwyg model-binding html-sanitizing