Wil*_*ill 2 c# asp.net-mvc markdown html-encode
我有一个网络表单,允许用户将文本上传为 Markdown。
Markdown 在服务器上转换为 Html(使用 Markdig)并存储。
当显示用户上传的转换后的 Html 时,我是否应该对内容进行 @Html.Encode - 该项目在 c#、MVC 5/razor 中,并启用了请求验证。
一般来说,这取决于降价转换器。
默认情况下,Markdig不会转义 html。但是,您可以使用DisableHtml管道中的函数来转义所有剩余的未由以前的扩展处理的 HTML 可编码字符串。这也应该比让反 xss 函数再次运行字符串提供更好的性能。
参见示例:
var pipeline = new MarkdownPipelineBuilder().DisableHtml().Build();
var result = Markdig.Markdown.ToHtml("<a href='javascript:evil()'>hello</a>", pipeline);
Run Code Online (Sandbox Code Playgroud)
不,不是。
我只是简单地测试了以下内容:
<a href="javascript:evil()">hello</a>
Run Code Online (Sandbox Code Playgroud)
并markdig让它通过:
请参阅在线示例。
虽然我没有深入研究它,但Microsoft AntiXSS 库在这里可能很有用:
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='javascript:evil()'>hello</a>");
Run Code Online (Sandbox Code Playgroud)
给出:
<a href="">hello</a>
Run Code Online (Sandbox Code Playgroud)
但
var safeHtml = Microsoft.Security.Application.Sanitizer
.GetSafeHtmlFragment("<a href='http://stackoverflow.com'>hello</a>");
Run Code Online (Sandbox Code Playgroud)
给出:
<a href="http://stackoverflow.com">hello</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |