解决方案
退后一步并提出一些较大的问题可能很有帮助。 Markdown试图解决的问题是浏览器中的丰富编辑。考虑一下:在某个时候,对于任何软件,以使其能够以某种方式描述丰富的文本,但可能是。
我们可以称之为丰富性的描述(通过对丰富性的描述,我的意思是“这一点的文本是粗体”或“这位文本是超链接),我们可以称之为Richness的描述为“ markup” - 它标记了具有元文本“丰富”。
丰富文本的实现可以采用两种方法,a。)从用户隐藏标记或b。)让他们可以访问标记。
对于那些选择隐藏它的人来说,最终结果通常是Wysiwyg。用户不理会幕后发生的事情。编辑会照顾细节。将MS Word视为一个例子。没有人作为常规最终用户操纵标记格式。
对于选择揭示标记的实现,然后是标记语言,以允许用户与之交流。这样的标记语言将是HTML做的事情 <tag>
例如或BB代码,做类似的事情 [tag]
.
降价就是这些语言之一。
与我提到的前者相反,Markdown试图设计自己,以使标记使人们已经使用了常见的ASCII。例如,人们打扰他们的文本很常见, *important*
, ,降级中的这种符号是斜体的指标。
正如斯蒂芬指出的那样,对于存储,系统很可能会存储原始的降价,因为用户很可能需要具有编辑的可能性,并且可以为此目的召回原始的markdown。
在我构建的大多数系统中,我都会存储降价,然后将其归一化为第二个字段,该字段缓存了降价的HTML渲染。这样,我就不必为每个降价字段进行Markdown-> HTML渲染。它需要更多的空间,但是我宁愿用户的响应更快,而不是使用更少的DB存储空间。
接受浏览器的降压时,还应注意它,因为它可以轻松包含 <script>
需要过滤的标签。大多数降价实现还将识别与降价格式相互混合的HTML,因此,为了安全起见,您需要确保对输入和缓存进行适当的消毒。
其他提示
使用HTML以外的其他编码系统的原因是安全
Markdown和其他此类Wiki样式编码系统通常不支持脚本语言
HTML在许多方面支持脚本语言(
两个主要的安全问题是:
恶意软件犯罪分子在用户生成的内容中使用脚本来尝试通过脚本访问已知安全孔在内容读取器上的恶意软件操作
使用脚本的免费装载机通过更改内容框架或样式来颠覆网站的其余部分,即广告,菜单,徽标等。这也可能是犯罪行为
通过使用中级语言(例如Markdown),您可以完全控制渲染输出
过滤HTML是可能的,但也很复杂且风险
替代编码系统的另一个重要原因是风格的执行。普通的HTML有太多选择。通过限制可用选项,用户只能使用某些样式。通常使看起来更清洁和更可读的内容(与eBay相比)
使用Markdown的主要原因是标记文本的可读性。例如,您可以通过平淡的电子邮件发送它,读者仍然会理解肺病,子弹,文字将在段落中划分。
当您询问存储数据时,这取决于。如果您在WordPress博客引擎中启用Markdown,则它将数据存储在用户输入时 - 在Markdown中。但是,在堆栈溢出中,似乎数据存储为HTML。至少,“堆栈溢出数据转储”包含HTML,而不是降压(我已经看过 人们抱怨)他们必须将其转换回)。
如果使用WMD编辑器,则可以向用户展示将输出转换为HTML后的外观。即使Markdown语法 是 真的很简单,不难犯错。因此,最好向用户展示输出。
使用Markdown而不是Wysiwig控件的另一个原因 - Wysiwig控件允许用户在网页上显示的数据中使用HTML。因此,您必须是一个决定何时只是不正确的HTML以及何时是邪恶的人 XSS/CSRF/无论注射什么。在Markdown中,您只需将 *某物 *转换为 <b>something</b>
, ,删除任何不知道的HTML元素,您就完成了。