1

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

$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]

谢谢

4

3 回答 3

3

PHP 实际上内置了对 bbcode 的支持(尽管您需要安装 PECL 扩展)。

或者,您可以使用PEAR 库 HTML_BBCodeParser 。

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

于 2010-04-18T04:23:49.747 回答
0

如果您确实想编写自己的 bbcode 解析器,最好花一些时间为它编写一个像样的递归下降解析器

这是因为您必须确保 bbcode 正确格式化和嵌套,在您的代码中有一个随机可能会破坏布局。您必须小心删除链接中的任何 javascript:// 协议标识符。并且采取只检查一次字符串以避免双重编码([b[b]bold me[/b]]me too[/b])。这个列表还在继续,超出了简单的正则表达式才能完全正确。

于 2010-04-18T08:00:05.670 回答
0
(\[color=((([a-zA-Z])+)|(\#[A-F0-9]{1,6})))

我认为这就是想法,我的正则表达式有点生疏(抱歉)。

于 2010-04-18T04:18:00.467 回答