1

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

第一次试验使用以下顺序:

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

现在显示编辑的数据:

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

前面的流程当然是坏掉了,比如<h1>渲染标签来显示,这主要是因为HttpUtility/WebUtility处理html编码的方式。例如,很难区分要显示code的内容以及要像嵌入<iframe>视频那样渲染的内容。

当我发布一些 markdown/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,这可行吗?

很抱歉这篇冗长的帖子,并在此先感谢!

4

0 回答 0