我有一种情况,客户端使用php4,看起来他们没有PEAR.是否有一个已经建立的PHP BBCode解析器可以与vBulletin的BBCode系统一起使用?
我只需要将BBCode转换为HTML.这是从vBulletin到新平台的数据迁移,因此我无法使用vBulletin的BBCode解析器.
文档:
bob*_*nce 11
'固体'?我从来没有找到一个可靠的BBcode解析器.他们似乎都是一个粗略的regexen集合,容易愚弄允许HTML注入攻击.
例如,发布的一个John W可以清楚地利用几个标签,包括:
[img]xxx" onerror="alert('JS injection!')[/img]
加上它允许javascript:和其他危险的URL,无法逃脱&,不允许许多URL字符(包括%!),同时意外地允许其他人不应该(作者还不太明白字符串中的反斜杠逃逸在那里做什么)和它没有禁止误导的标签或标签意外地吸入其他标签的属性...基本上它是一个不安全的混乱,这是与bbcode解析器的课程相提并论.
很抱歉没有帮助(这太大了,不适合评论).
ETA评论:啊,它不是一个bbcode模块,只是类似.我按行分割,删除现有的控制字符,然后使用字节01作为代理&,02 for <和03 for >,然后对于每个转换步骤使用re.split (\x02[^\x03]*\x03)并在每个第二个(非标记)部分运行替换正则表达式,从"内心"替换开始,如换行符和表情,然后通过图像向外工作到链接和斜体/粗体标记,插入\x02html tags\x03其中.然后最后用HTML编码&<>并替换控制代码&<>.这会阻止标记自身标记,这是简单的基于正则表达式的标记中的漏洞的主要来源.
想想看,我也写了一个实际的Python bbcode解析器,但只是作为一个快速的兼容性黑客; 它不提供完整bbcode的所有功能.特别是,它不允许在任何其他范围标记内嵌套任何范围标记(即带有关闭标记的标记).如果这是可以接受的,则相对容易实现,因为您可以使用单通道正则表达式来匹配任何标记,并使替换函数根据标记名称决定如何替换.例如.:
\[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] )
(这是一个VERBOSE正则表达式,所以空白只是为了可读性.任何正则表达式都是可读的.)
删除嵌套极大地简化了边角情况的数量.
| 归档时间: | 
 | 
| 查看次数: | 8183 次 | 
| 最近记录: |