私のweb2pyアプリでは、アイテムのリストを処理しています。ユーザーは各アイテムのリンクをクリックして選択できます。アイテムには、UUID、タイトル、および説明があります。わかりやすいように、アイテムの説明もリンク タイトルとして表示されます。説明内のタグによるインジェクションを防ぎ、エスケープするために、次のように XML サニタイザーを使用しています。
A(this_item.title, \
callback = URL('item', 'select', \
vars=dict(uuid=this_item.uuid), user_signature=True), \
_title=XML(str_replace(this_item.description, {'\r\n':' ', '<':'<', '>':'>'}), sanitize=True))
Python 2 を使用すると、すべて問題ありませんでした。Python 3 に切り替えたので、次の問題があります。説明に改行が含まれている場合、サニタイザーは機能しなくなります。たとえば、私の str_replace ルーチンによって生成される次の文字列は、Python 2 では XML ヘルパーによってサニタイズされても問題ありませんが、Python 3 ではサニタイズされません。
Header Line1 Line2 Line3
によってエスケープされた改行のサニタイズ
は、Python 3 の問題です (Python 2 では問題ありません)。それ以外は、XML ヘルパーがサニタイズするのに問題ありません (たとえば、より小さいか大きいか、記述がない場合は として生成されるため、これらが必要です<no description>
)。
Python3 で web2py を実行している XML ヘルパーによって改行をサニタイズするにはどうすればよいですか?
ご支援ありがとうございます。
よろしくクレメンス