渲染作为 Markdown 上传并在服务器端转换为 Html 的 Html 是否安全?
Is it safe to render Html that was uploaded as Markdown and converted serverside to Html?
我有一个允许用户将文本上传为 Markdown 的网络表单。
Markdown 在服务器上(使用 Markdig)转换为 Html 并存储。
在显示用户上传的转换后 Html 时,我是否应该 @Html.Encode 内容 - 该项目使用 c#,MVC 5/razor 并启用了请求验证。
不,不是。
我只是简单地测试了以下内容:
<a href="javascript:evil()">hello</a>
和markdig
让它通过:
虽然我没有深入研究它,Microsoft AntiXSS library 在这里可能会有用:
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='javascript:evil()'>hello</a>");
给出:
<a href="">hello</a>
但是
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='http://whosebug.com'>hello</a>");
给出:
<a href="http://whosebug.com">hello</a>
一般要看markdown转换器。
默认情况下 Markdig 不会转义 html。但是,您可以在管道中使用 DisableHtml
函数来转义之前扩展未处理的所有剩余 HTML 可编码字符串。这也应该比让反 xss 函数 运行 再次对字符串提供更好的性能。
参见示例:
var pipeline = new MarkdownPipelineBuilder().DisableHtml().Build();
var result = Markdig.Markdown.ToHtml("<a href='javascript:evil()'>hello</a>", pipeline);
我有一个允许用户将文本上传为 Markdown 的网络表单。
Markdown 在服务器上(使用 Markdig)转换为 Html 并存储。
在显示用户上传的转换后 Html 时,我是否应该 @Html.Encode 内容 - 该项目使用 c#,MVC 5/razor 并启用了请求验证。
不,不是。
我只是简单地测试了以下内容:
<a href="javascript:evil()">hello</a>
和markdig
让它通过:
虽然我没有深入研究它,Microsoft AntiXSS library 在这里可能会有用:
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='javascript:evil()'>hello</a>");
给出:
<a href="">hello</a>
但是
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='http://whosebug.com'>hello</a>");
给出:
<a href="http://whosebug.com">hello</a>
一般要看markdown转换器。
默认情况下 Markdig 不会转义 html。但是,您可以在管道中使用 DisableHtml
函数来转义之前扩展未处理的所有剩余 HTML 可编码字符串。这也应该比让反 xss 函数 运行 再次对字符串提供更好的性能。
参见示例:
var pipeline = new MarkdownPipelineBuilder().DisableHtml().Build();
var result = Markdig.Markdown.ToHtml("<a href='javascript:evil()'>hello</a>", pipeline);