PHP的“安全”降价处理器?
是否有适用于公众意见的markdown的PHP实现?
基本上它应该只允许markdown语法的一个子集(粗体,斜体,链接,块引用,代码块和列表),并且去掉所有内联HTML(或者可能转义它)?
我想一个select是使用正常的降价parsing器,并通过HTML sanitiser运行输出,但有没有更好的办法做到这一点..?
我们在网站的其他部分使用PHP markdown Extra,所以我们必须使用辅助parsing器(非“额外”版本,因为像脚注支持是不必要的)。它也似乎更好的parsing*bold*
文本并将所有内容都转义为<a href="etc">
,而不是生成<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之前,通过降价处理? 它应该逃脱任何危险,但留下一切降价了解。
我试图想到这样的情况,这不起作用,但不能想到任何东西。