是否有一个坚实的BB代码解析器为PHP没有依赖?

时间:2009-11-25 19:37:24

标签: php bbcode

我遇到的情况是客户端使用php4并且看起来不像是PEAR。是否有一个可以与vBulletin的BBCode系统一起使用的已建立的PHP BBCode解析器?

我只需要将BBCode转换为HTML。这是从vBulletin到新平台的数据迁移,所以我不能使用vBulletin的BBCode解析器。

文档:

http://www.vbulletin.com/forum/misc.php?do=bbcode

3 个答案:

答案 0 :(得分:11)

“固体”?我根本没有找到一个可靠的BBcode解析器。它们似乎都是一个粗略的regexen集合,很容易愚弄允许HTML注入攻击。

例如,John W发布的一个人可以清楚地利用几个标签,包括:

[img]xxx" onerror="alert('JS injection!')[/img]

加上它允许javascript:和其他危险网址,无法逃脱&,不允许许多网址字符(包括%!),同时意外地允许其他人不应该(作者没有)我完全理解字符串中的反斜杠逃逸在那里做了什么)并且它不能禁止错误的标签或标签意外地吸入其他标签的属性......基本上它是一个不安全的混乱,这是与bbcode的课程相提并论分析器。

对于无用的答案感到抱歉(它太大了,不适合评论)。

ETA评论:啊,它不完全是一个bbcode模块,只是类似。我按行分割,删除现有的控制字符,然后使用字节01作为&的代理,02代表<,03代表>,然后对于每个转换步骤使用re.split on (\x02[^\x03]*\x03)并在每一秒(非标记)部分运行替换正则表达式,从“内部”替换(如换行符和表情)开始,然后通过图像向外工作到链接和斜体/粗体标记,插入{{1}就这样。然后最后HTML编码\x02html tags\x03并用&<>替换控制代码。这会阻止标记自身标记,这是简单的基于正则表达式的标记中的一个主要漏洞。

想想看,我也写了一个实际的Python bbcode解析器,但只是作为一个快速的兼容性黑客;它不提供完整bbcode的所有功能。特别是,它不允许在任何其他范围标记内嵌套任何范围标记(即带有关闭标记的标记)。如果这是可以接受的,则相对容易实现,因为您可以使用单通道正则表达式来匹配任何标记,并使替换函数根据标记名称决定如何替换。例如:

&<>

(这是一个\[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] ) 正则表达式,所以空格只是为了可读性。任何正则表达式都是可读的。)

删除嵌套大大简化了转角情况。

答案 1 :(得分:3)

Here's one on HotScripts.com.

更新以回应批评(在您接受此答案后三年内提出)这个帖子中没有直接包含足够的内容。

脚本的名称目前是“Recruiting Parser(BBCode to HTML)”。

更新了截至2013年2月11日的链接。

为了面向未来的链接,如果它再次被破坏,我建议使用谷歌搜索词 BBCode to HTML php ,就像我在回答这个问题时所做的那样。或者,您可以访问HotScripts,在更具针对性的环境中尝试搜索技能。

答案 2 :(得分:1)

这个库不需要PEAR,并且有一些防止注射的技巧。

http://www.christian-seiler.de/projekte/php/bbcode/index_en.html