1

对于我的应用程序,我稍微定制了 WMD 的行为方式,因此当用户输入空行时,这些在 HTML 输出中反映为<br />'s. 现在我到了应该将它存储在后端某个地方的地步,所以在浏览 SO 帖子一段时间后,我不确定什么是最好的方法。我有几个选择,如果你能指出他们的优点/缺点,那将不胜感激。

  1. 发送到服务器并存储为降价而不是 HTML。对我来说,明显的优势是保持与用户最初输入的格式完全相同。但是,我怎样才能将它转换回 HTML 以显示给客户端呢?在客户端转换它似乎很麻烦,即使如果禁用 JS 可能会发生什么?如果我想在服务器上执行此操作,那么 HTML 标记的标准服务器端实现可能会耗费大量资源。你认为这会是一个问题吗?即使情况并非如此,正如我提到的那样,我的 WMD 实现是定制的,并且这些服务器端解决方案可能无论如何都不会正确转换为降价,并且总是存在转换错误的风险。

  2. 作为转换后的 HTML 发送到服务器。同上..客户端的转换会很困难,服务器端的转换可能会出错。

  3. 发送原始降价和转换后的 HTML 并存储两者。没有与在客户端或服务器端将 Markdown 转换为 HTML 相关的性能问题。用户将始终拥有他们最初输入的相同降价和最初在预览中看到的相同 HTML(尽管可能在 php 中进行了清理)。不过,它必须占用两倍的存储空间,这是我最大的担心。

我倾向于倾向于第三种解决方案,因为它看起来最简单,但担心此解决方案需要双倍的存储空间。请记住,我的 WMD 实现略有修改,而且我将使用 PHP/MySql 服务器端实现。

因此,除了我上面列出的 3 个选项之外,还有其他可能的解决方案来解决我的问题吗?我是否错过了任何重要的事情,可以使上述选项之一比其他选项更好?我列出的每个解决方案还有哪些其他优点/缺点?还有它是如何在 SO 上实现的?我在某处读到他们使用选项 3,所以如果它对 SO 来说足够好,对我来说就足够好了:) 但不确定它是否是真的,那么它是如何完成的?

另外请原谅我,但至少有一次我要说 StackOverflow 是网络上最好的该死的资源,我真的很感谢所有在这里试图帮助他人的人!这里的网站和用户简直太棒了!

4

2 回答 2

2

作为降价或转换后的 HTML 发送到服务器

接受来自客户端的 Markdown 而不是 HTML 的一个原因是,接受来自客户端的任意 HTML 存在安全风险:如果您接受 HTML,那么客户端可能会向您发送带有恶意代码的 HTML,您将存储这些代码然后反馈(也许到另一个客户端:因此您最终将恶意代码发送到另一个客户端)。出于这个原因,最好只接受来自客户端的降价(而不是 HTML)。

如果我想在服务器上执行此操作,那么 HTML 标记的标准服务器端实现可能会耗费大量资源。你认为这会是一个问题吗?

我不知道“标准服务器端实现”是什么,但我猜这(生成 HTML)是服务器应该能够进行的那种处理。

于 2009-12-05T04:05:59.350 回答
0

第 4 个。选项是存储降价,并在请求时使用服务器端库将降价呈现为 HTML,然后使用缓存来防止性能下降。

来自 ChrisW 的关于安全问题的评论——这是一个非常有效的观点,让您自己关注对输入的清理。但是,也不要错误地假设降价是安全的。从我看到的 WMD 和它的 showdown.js 处理器来看,你仍然可以给它提供 HTML,它会把它留在那里。因此,使用大规模杀伤性武器编辑器的人仍有可能进入<script>或其他任何情况。

实际上谈论这个让我觉得我需要检查我当前的实现..

于 2009-12-05T05:37:35.460 回答