1

PHP で BBcode を解析しようとしていますが、私のコードはまったく安全ではないと思います。

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

このような注射を渡すことができ、うまくいくと思います:

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

正規表現を改善して、2 つの標準色形式のみをキャプチャする方法:

[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://プロトコル識別子を削除するように注意する必要があります。また、二重エンコードを回避するために、文字列を1回だけ確認してください([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 に答える