2010-05-04 40 views
2

我希望我的用户能够在Markdown中撰写文章,将其存储在MySQL数据库中(可选择在将来进行编辑),并显示给其他用户。使用Markdown&MySQL时的正确操作顺序?

在实践中,这是我的它的工作原理的认识:

INPUT

通过HTML形式使用降价语法
  • 用户输入
  • $queryInput = mysql_real_escape_string($userInput);
  • 插入消毒后的字符串到数据库中
  • OUTPUT

    从数据库0
    1. 查询字段
    2. $output = Markdown($queryResult);
    3. 显示$output

    是不是这样?

    请问PHP Markdown是否需要htmlspecialcharsPure HTML

    谢谢!

    回答

    2

    我在几周前评估过使用PHP降价(并且决定不使用它)。我的想法:

    • 它可能不是一个好主意,每个输出渲染的时候运行的降价解析器 - 解析评论是相当昂贵,一般的博客评论(作为一个例子)是更为经常阅读比书面。您应该在将用户输入保存到数据库之前运行markdown解析器!

    • 现在真的很棘手的问题:Markdown本身并没有进行任何安全检查。所有的xss攻击都高兴地通过了。如果您现在认为“没有问题,我会在获得用户输入之后立即使用strip_tags”,再想一想:在处理用户输入时,markdown很可能会创建包含XSS的标签。因此,您必须检查markdown创建的HTML代码是否存在安全问题 - 这是一个非常困难的任务,非常容易出错。 (这是没有在我的情况下使用它的原因 - 好处没有很好的比例潜在成本)

    +0

    感谢您的答复。 2个问题:(1)如果我在保存到数据库之前解析,用户如何编辑他们的文章? (2)您决定做什么来代替Markdown? – Drew 2010-05-04 10:39:14

    +0

    解析器性能的妥协 - 如果我保存了用户输入的2个副本,原始的一个副本,解析的一个副本。然后,我只需解析一次,如果用户想编辑,我可以给他们的原件,并在他们完成后覆盖分析的副本... – Drew 2010-05-04 10:43:48

    +0

    存储2个副本,一个解析和一个原始,也是我的方法。认为它是一个好主意。 我查看了博客评论模块Markdown,并使用普通纯文本与nl2br代替(添加了用于突出显示链接的正则表达式)。无论如何,对于这个用例,减价有点矫枉过正。 – 2010-05-04 10:59:28