我打算使用EpicEditor作为博客引擎的编辑器,我目前的堆栈是AngularJS,ServiceStack和RavenDB。这里的问题,我想向数据存储提供安全的html和markdown标记,当然还有恢复时的实际表示,问题是我想保留安全的html标签并添加一些功能来嵌入视频,例如,
首次试验使用以下顺序:
现在显示已编辑的数据:
前一个过程当然被打破,例如,<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>>> http://www.youtube.com/watch?v=Skl71urqKu0\n\n<iframe width='420' height='315' src='http://www.youtube.com/embed/veJZDANY6go' frameborder='0' allowfullscreen></iframe>\n\n<h1>huhuhu</h1>\n\n<script>alert('fail')</script>\n\n <script>alert('win')</script>"
}
以前编码的字符串在使用 Marked.js 解析后显示实际代码方面也会中断。例如,我在XSS尝试中神奇地添加了&
,这甚至打破了显示代码。澄清一下,它看起来像这样:
<pre><code>&lt;script&gt;alert(&#39;win&#39;)&lt;/script&gt;</code></pre>
我知道有 antixss 库可以清理代码,但这样做是否可以完全安全地存储在数据库中?
另外我在考虑解析实际链接并在服务器上构建嵌入字符串而不是允许处理原始html,这是否可行?
对于冗长的帖子感到抱歉,并提前致谢!