如何安全地解析bbcodes?

时间:2010-04-18 04:01:29

标签: php regex bbcode

我正在尝试解析php中的BBcodes,但我认为我的代码根本不安全。

$Text = preg_replace("(\[color=(.+?)\](.+?)\[\/color\])is","<span style=\"color: $1\">$2</span>",$Text); 

我认为你可以通过这样的注射,它会起作用:

[color=<script>alert('gotcha');</script>]...[/color]

如何提高我的正则表达式,只捕获两种标准颜色格式:

[color=red]...[/color] OR [color=#FF0000]...[/color]

由于

3 个答案:

答案 0 :(得分:3)

PHP实际上有built-in support for bbcode(虽然您需要安装PECL扩展程序)。

或者,您可以使用PEAR library HTML_BBCodeParser

我建议使用上述解决方案之一,而不是编写自己的解决方案,因为它们已经过社区测试。

答案 1 :(得分:0)

(\[color=((([a-zA-Z])+)|(\#[A-F0-9]{1,6})))

我认为这是个主意,我的正则表达式有点生疏(抱歉)。

答案 2 :(得分:0)

如果你想编写自己的bbcode解析器,最好花一些时间为它写一个体面的Recursive descent parser

这是因为您必须确保bbcode格式正确并嵌套,在代码中随机可能会破坏布局。您必须注意删除链接中的任何javascript://协议标识符。并采取只删除一次字符串以避免双重编码([b [b]加粗我[/ b]]我[/ b])。该列表继续进行,并且超出了简单的正则表达式以完全正确。