在python中转义html?

Tim*_*mmy 4 html python escaping

我有一个<img src=__string__>字符串可能包含",我该怎么做才能逃脱它?

例:

__string__ = test".jpg
<img src="test".jpg">
Run Code Online (Sandbox Code Playgroud)

不起作用.

Mac*_*rko 13

在Python 3.2 html中引入了一个新模块,用于从HTML标记中转义保留字符.

它有一个功能html.escape(s, quote=True).如果可选标志的报价是真实的,人物(")(')被翻译.

用法:

>>> import html
>>> html.escape('x > 2 && x < 7')
'x &gt; 2 &amp;&amp; x &lt; 7'
Run Code Online (Sandbox Code Playgroud)


gom*_*mad 11

如果您的值被转义可能包含引号,最好的quoteattr方法是使用该方法:http://docs.python.org/library/xml.sax.utils.html#module-xml.sax.saxutils

这是在cgi.escape()方法的文档下面引用的.

  • +1,quoteattr**正是**用于此的正确函数(并且在线Python文档也非常清楚这一点!). (2认同)
  • 此功能不足.我能够以这种方式注入HTML.但是,`django.utils.html.escape`工作了. (2认同)

ʇsә*_*ɹoɈ 5

import cgi
s = cgi.escape('test".jpg', True)
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/library/cgi.html#cgi.escape

请注意,该True标志告诉它转义双引号.如果您还需要转义单引号(如果您是使用单引号括起html属性的少数人之一),请阅读该文档链接中有关xml.sax.saxutils.quoteattr()的说明.后者会做两种报价,但速度大约是后者的三倍:

>>> timeit.Timer( "escape('asdf\"asef', True)", "from cgi import escape").timeit()
1.2772219181060791
>>> timeit.Timer( "quoteattr('asdf\"asef')", "from xml.sax.saxutils import quoteattr").timeit()
3.9785079956054688
Run Code Online (Sandbox Code Playgroud)

  • cgi.escape不会转义单引号.因此,将它用于HTML转义是危险的,因为放入变量的属性可以是单引号.如果属性是单引号,则可以轻松找到跨站点脚本漏洞. (3认同)