在渲染和存储中安全地处理markdown和html的混合

时间:2013-06-09 21:52:09

标签: html .net parsing xss markdown

我打算使用EpicEditor作为博客引擎的编辑器,我目前的堆栈是AngularJS,ServiceStack和RavenDB。这里的问题,我想向数据存储提供安全的html和markdown标记,当然还有恢复时的实际表示,问题是我想保留安全的html标签并添加一些功能来嵌入视频,例如,

首次试验使用以下顺序:

  • 编辑完成
  • 发布到api
  • 来自编辑器的原始文本已编码并保存

现在显示已编辑的数据:

  • 获取已编码的字符串
  • 将其作为回复
  • 使用内置解析器(Marked.js)
  • 解析它

前一个过程当然被打破,例如,<h1>标签被渲染显示,这主要是因为处理html编码的HttpUtility/WebUtility方式。很难区分显示为code的内容和要为视频嵌入的<iframe>呈现的内容。

当我发布一些降价/ html标记时,如下所示:

#Hello, World

>>> http://www.youtube.com/watch?v=Skl71urqKu0

<iframe width="420" height="315" src="http://www.youtube.com/embed/veJZDANY6go" frameborder="0" allowfullscreen></iframe>

<h1>huhuhu</h1>

<script>alert("fail")</script>

    <script>alert("win")</script>

这是我从WebUtility.HtmlEcode()获得的:

{
    "status": "#Hello, World\n\n&gt;&gt;&gt; http://www.youtube.com/watch?v=Skl71urqKu0\n\n&lt;iframe width=&#39;420&#39; height=&#39;315&#39; src=&#39;http://www.youtube.com/embed/veJZDANY6go&#39; frameborder=&#39;0&#39; allowfullscreen&gt;&lt;/iframe&gt;\n\n&lt;h1&gt;huhuhu&lt;/h1&gt;\n\n&lt;script&gt;alert(&#39;fail&#39;)&lt;/script&gt;\n\n    &lt;script&gt;alert(&#39;win&#39;)&lt;/script&gt;"
}

以前编码的字符串在使用 Marked.js 解析后显示实际代码方面也会中断。例如,我在XSS尝试中神奇地添加了&,这甚至打破了显示代码。澄清一下,它看起来像这样:

<pre><code>&amp;lt;script&amp;gt;alert(&amp;#39;win&amp;#39;)&amp;lt;/script&amp;gt;</code></pre>

我知道有 antixss 库可以清理代码,但这样做是否可以完全安全地存储在数据库中?

另外我在考虑解析实际链接并在服务器上构建嵌入字符串而不是允许处理原始html,这是否可行?

对于冗长的帖子感到抱歉,并提前致谢!

0 个答案:

没有答案