私はBeautifulSoupを使用して、任意のテキストセットからすべてのHTMLタグ(aのような事前承認タグのセットを除く)をエスケープします。しかし、実際の有効なHTMLタグであればタグをエスケープしたいだけです。何かがタグのように見えますが、そうでない場合は、HTMLを追加して閉じてしまいます。私は望みません。BeautifulSoupがタグのように見えるが、そうではない自己閉鎖のものを防ぐ方法を教えてください。
例:誰かがテキスト<integer>
に入った場合は、私のコードは<integer></integer>
だけではなく<integer>
を吐き終わるここのコードです(value
は、HTML文字列であるとVALID_TAGS
が許容できるタグ名のリストだけです)。
soup = BeautifulSoup.BeautifulSoup(
value, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
# Loop through all the tags. If it is invalid, escape the characters.
for tag in soup.findAll():
if tag.name not in VALID_TAGS:
tag.replaceWith(cgi.escape(str(tag)))
return soup.renderContents()
ありがとうございます。
私の意見はあなたが仕事に間違ったツールを使用しているということです。 –
少なくとも、属性をフィルタリングする必要があります。 'Look at this!' http://html5sec.orgを見てください。 –
私も属性をフィルタリングしています(ホワイトリストの場合を除いて)。私はサンプルコードから削除し、明確にするために質問します。 – Chad