【问题标题】:What is the best way to store WMD input/markdown in SQL server and display later?在 SQL 服务器中存储 WMD 输入/降价并稍后显示的最佳方法是什么?
【发布时间】:2011-03-06 02:28:27
【问题描述】:

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

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

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

任何人都可以确认或否认这是否正确,并就该主题添加任何有用的输入

参考
Reformat my code: Sanitize Html
StackOverflow: how do you store the markdown using wmd in asp net
StackOverflow: sanitize html before storing in the db or before rendering antixss library
StackOverflow: store html entities in database or convert when retrieved

【问题讨论】:

    标签: .net asp.net-mvc markdown antixsslibrary


    【解决方案1】:

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

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

    1. 我使用wmd.js 作为客户端编辑器。
    2. 我使用 MarkdownSharp 服务器端处理。
    3. 我使用Jeff Atwood's Sanitize HTML 覆盖处理HTML。

    这里有一些关于 Markdown 的资源:

    底线:

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

    【讨论】:

    • 两个问题... 1) 为什么要清理输出而不是输入?和 2) 这些 MVC “最佳实践”是什么……有文章可以阅读吗?
    • @rock 您对输出进行清理,因为您不想破坏用户在数据库中输入的内容。通过清理输出,您可以保留原始文本,以防您决定更改用于清理输入的内容。关于最佳实践,请参阅 Rob Conery、Scott Hanselman、Phil Haack 和 Scott Guthrie 的“ASP.NET MVC 1.0”。此外,Phil 的博客haacked.com 是 MVC 项目的绝佳资源。
    • 因此,如果用户向您的数据库提交诸如 javascript 或恶意垃圾之类的内容,您不担心吗?此外,在输入上进行一次清理不会比对每个输出进行清理会降低系统负载吗?
    • 这里有两个单独的问题。一:JavaScript 仅在您查看后才重要。数据库中的 JavaScript 无关紧要。当有人通过网页访问它时,这很重要。二:通过参数化查询或像 Linq-to-SQL 或实体框架这样的 ORM 单独处理 SQL 注入。输出有负载,但正如您在 Stack Overflow 之类的网站上看到的(获得的流量比您的网站或我的网站更多),您可以对其进行优化。您甚至注意到加载所需的时间吗?我不。你认为 Jeff and Co. 是如何做到的?他们在视图中进行消毒。
    • @rock 您将 [ValidateInput(false)] 添加到您希望允许人们将自定义输入放入的控制器方法中。有解决方法:weblogs.asp.net/rashid/archive/2009/02/14/…
    【解决方案2】:

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

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

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

    【讨论】:

    • 这是一个错误的答案。 Markdown 允许任意 HTML。由 Markdown 的消费者决定什么是“好”的 HTML,什么不是。
    • 啊,不对。 WMD 的实现确实如此,但 Markdown 本身应该仅限于它自己的标签,并产生它自己的有效 XHTML。当然,Gruber 缺乏文档或任何规范都无济于事。
    • “所以 Markdown 背后的一个想法是它会产生“安全”的 html”——这是否意味着 WMD 引擎已经去除了不安全的 html(如脚本)
    • @rockinthesixstring 不,WMD 不会删除不安全的 HTML。
    • WMD 还有一个问题——它是客户端。因此,如果您信任它,我可以禁用 javascript 或使用 fiddler 提交。 Stackoverflow 使用 Markdown sharp 来解析服务器端。 code.google.com/p/markdownsharp 请注意,markdown sharp 不允许任意 HTML,它是“正确的”markdown,因为我暗示它应该是在 George 认为 WMD 所做的事情是“正确的”之前。
    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2011-01-13
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多