10

我正在考虑在我的项目中使用 WMD,而不是我现有的 RadEditor。我一直在阅读一些关于如何存储和检索数据的帖子,我想在继续之前确保我的概念是正确的。

如果我的研究是正确的,这就是我应该做的。

  1. 我应该将编辑器数据存储两次(一次作为 HTML,一次作为 Markdown)
  2. 我应该在存储之前通过白名单运行 HTML。
  3. 我应该在退出时通过 AntiXSS 运行 HTML(在显示之前)
  4. 我应该只使用 Markdown 数据来重新填充 Markdown 进行编辑。

如果这是正确的,任何人都可以确认或否认,并在这个主题上添加任何有用的输入吗?

参考
重新格式化我的代码:清理 Html
StackOverflow:如何在 asp net
StackOverflow 中使用 wmd 存储降价:在存储到 db 或呈现 antixss 库之前清理 html
StackOverflow:将 html 实体存储在数据库中或在检索时进行转换

4

2 回答 2

8

我正在编写的博客引擎中实现 Markdown(谁不编写博客引擎?),并且我还在为客户编写的许多定制 CMS 中实现了 Markdown。

我的做法与 Stack Overflow 团队的做法非常相似:

  1. 我使用wmd.js作为客户端编辑器。
  2. 我使用 MarkdownSharp 服务器端处理。
  3. 我使用Jeff Atwood 的 Sanitize HTML来介绍处理 HTML。

以下是一些关于 Markdown 的资源:

底线:

  1. 我以提交的形式存储帖子;它使用 MarkdownSharp 显示。
  2. 我使用 Jeff Atwood 的方法清理 HTML(在输出上,而不是在输入上)。
  3. 我利用 ASP.NET MVC 的“最佳实践”(一个非常主观的术语)来处理 XSS 和 XSRF。
于 2010-06-22T12:11:40.267 回答
0

所以 Markdown 背后的一个想法是它会产生“安全”的 html——应该不需要单独的编码。

更一般地说,我建议将“原始”数据存储在数据库中,而不对其进行转换或清理。您应该始终尽可能接近渲染点进行清理或转换 - 它提供了更大的灵活性(哦,突然我需要渲染为 RSS。或 JSON。该死,我不能,因为我为 HTML 预先格式化)并且,应该更新消毒剂或渲染器,您会看到更新对每条数据的影响。

我会说将降价文本存储在数据库中,然后在需要渲染时对其进行转换,为此使用降价库,理论上,所有安全的 HTML 都应该从其安全的标签和属性列表构建。

于 2010-06-21T19:19:16.883 回答