我遇到的情况是客户端使用php4并且看起来不像是PEAR。是否有一个可以与vBulletin的BBCode系统一起使用的已建立的PHP BBCode解析器?
我只需要将BBCode转换为HTML。这是从vBulletin到新平台的数据迁移,所以我不能使用vBulletin的BBCode解析器。
文档:
答案 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)
更新以回应批评(在您接受此答案后三年内提出)这个帖子中没有直接包含足够的内容。
脚本的名称目前是“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