2010-04-18 4 views
1

나는 PHP에서 BB 코드를 구문 분석하려고하지만 내 코드가 전혀 안전하지 않다고 생각합니다.bbcodes를 안전하게 구문 분석하는 방법은 무엇입니까?

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

나는이 같은 주사를 전달할 수 있다고 생각하고 그것을 작동합니다

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

감사 :

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

방법 만이 standar을 색상 형식을 캡처 내 정규식을 개선하기 위해

+1

html 태그를 마스크하려면'<'를 모두 '<'으로 바꿉니다. – serg

+0

BBCode는 일반 언어가 아니므로 정규식을 사용하여 구문 분석 할 수 없습니다. – Gumbo

답변

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

at the idea, 나의 정규식은 약간 녹슬다. (미안).

0

bbcode 파서를 직접 작성하고 싶다면 Recursive descent parser을 작성하는 것이 좋습니다.

bbcode가 올바르게 형식화되고 중첩되어 있어야하므로 코드에 임의의 기호가 있으면 레이아웃이 손상 될 수 있습니다. 링크에서 javascript : // 프로토콜 식별자를 제거해야합니다. 그리고 이중 인코딩 (b [b] bold me [/ b]] 나도 [b])을 피하기 위해 한 번만 문자열을 가져 가려합니다. 목록은 계속 나아가고 완전히 정규 표현식을 벗어나는 단순한 정규 표현식을 뛰어 넘습니다.