PHP的“安全”降价处理器?

是否有适用于公众意见的markdown的PHP实现?

基本上它应该只允许markdown语法的一个子集(粗体,斜体,链接,块引用,代码块和列表),并且去掉所有内联HTML(或者可能转义它)?

我想一个select是使用正常的降价parsing器,并通过HTML sanitiser运行输出,但有没有更好的办法做到这一点..?

我们在网站的其他部分使用PHP markdown Extra,所以我们必须使用辅助parsing器(非“额外”版本,因为像脚注支持是不必要的)。它也似乎更好的parsing*bold*文本并将所有内容都转义为&lt;a href="etc"&gt; ,而不是生成<b>bold</b>文本,并试图剥离我们不想要的位。

另外,在一个相关的说明中,我们使用WMD控制的“主”网站,但对于评论,还有什么其他的select? 大规模杀伤性武器的JavaScript预览是好的,但它需要与PHP降价处理器相同的“绝望”(它不能显示图像等,否则有人会提交,他们的工作降价会“打破”)

目前我的计划是使用PHP-markdown – > HTML santiser方法,并编辑WMD以从showdown.js删除图像/标题语法 – 但似乎这已经做了无数次。

基本上:

  • PHP中是否存在“安全”markdown实现?
  • 有一个HTML / JavaScript的降价编辑器,可以轻松禁用相同的选项?

更新:我最后只是通过HTML Purifier运行markdown()输出。

这样,Markdown渲染与输出消毒是分开的,它更加简单(两个大部分是未经修改的代码库)更安全(你不是一次尝试渲染和消毒),而且更灵活(可以有多个消毒级别,可信内容configuration比较宽松,公众意见要严格得多)

PHP的Markdown有一个消毒剂的选项,但它似乎没有广告任何地方。 看看markdown.php Markdown_Parser类的顶部(从版本1.0.1m的第191行开始)。 我们对209-211行感兴趣:

 # Change to `true` to disallow markup or entities. var $no_markup = false; var $no_entities = false; 

如果您将这些更改为true ,则应分别标记和实体,而不是逐字逐句插入。 似乎没有任何内置的方式来改变这些(例如通过构造函数),但是你可以添加一个:

 function do_markdown($text, $safe=false) { $parser = new Markdown_Parser; if ($safe) { $parser->no_markup = true; $parser->no_entities = true; } return $parser->transform($text); } 

请注意,上面的函数在每次运行时创build一个新的parsing器,而不是像提供的Markdown函数(第43-56行)那样caching它,所以它可能有点慢。

JavaScript Markdown编辑器假设:

  • 使用JavaScript驱动的Markdown Editor,例如基于摊牌
  • 删除工具栏中所有不需要的项目的图标和视觉线索
  • 设置一个JavaScriptfilter来清理提交时不需要的标记
  • 在计算机上本地testing并强化所有JavaScript更改和filter
  • 在PHP提交脚本中镜像这些filter,以在服务器端捕获相同的filter。
  • 从帮助/教程中删除对不需要的项目的所有引用

我已经在JavaScript中创build了一个Markdown编辑器,但它具有增强的function。 这花了大量的时间和SVN修订。 但是我不认为改变一个Markdown编辑器来限制HTML是不容易的。

如果你想编写自己的parsing器,为什么不使用BBCode体系结构。

提交你的/(用户)注释时,你需要用mysql_escape_real_string()来清理文本,是的,还有其他的function,但是这将停止任何JS注入。

如何在用户inputinput上运行htmlspecialchars之前,通过降价处理? 它应该逃脱任何危险,但留下一切降价了解。

我试图想到这样的情况,这不起作用,但不能想到任何东西。