<分区>
我遇到过客户端使用 php4 但看起来不像他们有 PEAR 的情况。是否有一个已建立的 PHP BBCode 解析器可以与 vBulletin 的 BBCode 系统一起工作?
我只需要将 BBCode 转换为 HTML。这是从vBulletin 到新平台的数据迁移,所以我不能使用vBulletin 的BBCode 解析器。
文档:
<分区>
我遇到过客户端使用 php4 但看起来不像他们有 PEAR 的情况。是否有一个已建立的 PHP BBCode 解析器可以与 vBulletin 的 BBCode 系统一起工作?
我只需要将 BBCode 转换为 HTML。这是从vBulletin 到新平台的数据迁移,所以我不能使用vBulletin 的BBCode 解析器。
文档:
最佳答案
‘坚固’?我从来没有找到一个可靠的 BBcode 解析器。它们似乎都是粗心的正则表达式的松散集合,很容易被愚弄以允许 HTML 注入(inject)攻击。
例如,John W 发布的那篇文章显然可以通过多个标签加以利用,包括:
[img]xxx" onerror="alert('JS injection!')[/img]
加上它允许 javascript:
和其他危险网址,无法转义&
, 不允许许多 URL 字符(包括 %
!),同时不小心允许其他不应该的字符(作者还不太明白字符串中的反斜杠转义符在那里做什么)并且它无法禁止错误嵌套的标签或意外标签吸收了其他标签的属性...基本上这是一个不安全的困惑,这与 bbcode 解析器的类(class)相同。
对于没有帮助的回答感到抱歉(它太大而无法放在评论中)。
ETA 回复评论:嗯,它不完全是一个 bbcode 模块,只是相似。我按行拆分,删除了现有的控制字符,然后使用字节 01 作为 &
的代理项, 02 表示 <
03 表示 >
,然后对于每个转换步骤,在 (\x02[^\x03]*\x03)
上使用 re.split并在每一秒(非标签)部分运行替换正则表达式,从换行符和表情符号等“最内层”替换开始,然后通过图像向外工作到链接和斜体/粗体标记,插入 \x02html tags\x03
顺其自然。然后最后 HTML 编码 &<>
并将控制代码替换为 &<>
.这会阻止标记本身被标记,这是简单的基于正则表达式的标记中漏洞的一大来源。
回想起来,我确实也编写了一个实际的 Python bbcode 解析器,但只是作为一个快速的兼容性 hack;它不提供完整 bbcode 的所有功能。特别是,它不允许在任何其他范围标签内嵌套任何范围标签(即带有关闭标签的标签)。如果可以接受,这实现起来相对容易,因为您可以使用单次正则表达式来匹配任何标签,并让替换函数根据标签名称决定如何替换。例如:
\[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] )
(这是一个 VERBOSE
正则表达式,所以空格只是为了便于阅读。就像任何正则表达式一样可读。)
去除嵌套极大地简化了极端情况的数量。
关于php - 是否有可靠的 PHP 无依赖性 BB 代码解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799454/