2010-12-11 12 views

答えて

4

はあなたが速いの方法や正しいです方法をしたいですか?正規表現ベースのアプローチは正しいとは思わないし、XSSまで攻撃を開く可能性があります。

あなたはBeautiful SoupあるいはhtmllibのようなHTMLパーサを使用する必要があります。

また、<a>javascript:href秒を含めることができ、javascriptをしている様々なon *属性もあります。おそらく、それらのすべてを取り除きたいと思うでしょう。一般的には、ホワイトリストのアプローチが最善です。あなたが知っている属性(および属性値)のみを安全に保つだけです。

+0

+1 for not Regex –

0

保存する要素をプレースホルダーの値で置き換え、残っているものを正規表現<。*>に置き換え、最後にプレースホルダーを対応するhtml要素に置き換えます。

+0

、あなたに余分な計算なしでサポートBBコードの素敵な副作用を与えます。 – Daniel

1

私はローレンスに同意しながら、迅速かつ汚い99%のアプローチは他の問題を作成せずに仕事を取得する機会があります。

import re 

CLEANBODY_RE = re.compile(r'<(/?)(.+?)>', re.M) 

def _repl(match): 
    tag = match.group(2).split(' ')[0] 
    if tag == 'p': 
     return '<%sp>' % match.group(1) 
    elif tag in ('a', 'br', 'ul', 'li', 'b', 'strong', 'em', 'i'): 
     return match.group(0) 
    return u'' 

def cleanbody(html): 
    return CLEANBODY_RE.sub(_repl, html) 
関連する問題