python标记扩展,用于清理不受信任的标记文档的输出。
mdx_bleach的Python项目详细描述
#mdx_bleach
**mdx_bleach**是一个[python标记](https://pythonhosted.org/markdown/)
扩展,它基于一个
白名单来清理不受信任的标记文档的输出。扩展是基于[漂白剂](http://bleach.readthedocs.org/en/latest/),
一个健壮的基于白名单的HTML消毒剂。
根据设计,所有HTML标记都允许在降价文档中使用。除非在代码块中写入
,否则原始html不会转义,因此由
web浏览器呈现。虽然这是一个不错的创作功能,但它也暴露了一些xss
漏洞。当标记文档的源
不可信时,这就成为一个问题。
**mdx_bleach**打算为python标记的
[不推荐的安全模式](https://pythonhosted.org/markdown/reference.html安全模式)提供更安全、更灵活的替代方案。
##安装md=markdown.markdown(extensions=[漂白剂])
>;>md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;P>;<;SPAN>;不允许<;SPAN>;<;P>;'
``
,因为默认情况下不允许使用`<;SPAN>;``标记,**mdx_漂白剂**退出。
默认白名单可以在"mdx_漂白剂.白名单"中找到。
将以下关键字参数传递给``blazeextension``:
*``tags``tag whitelist
*``attributes``attributes whitelist
*``styles``styles whitelist
*``protocols`` protocols whitelist
*``strip``剥离标记
*``strip`comments``剥离注释
下面的示例反映了默认配置:
``python
from mdx_bleach.whitelist import allowed_tags,allowed_attributes,allowed_styles,allowed_protocols
bleach=bleadence(tags=allowed_tags,attributes=allowed_attributes,
styles=allowed_styles,protocols=allowed_protocols,strip=false,strip_comments=true)
md=markdown.markdown(extensions=[bleach])
`````
``tags``kwarg是允许的html标记的白名单。它应该是一个列表、
元组或其他iterable。任何其他HTML标记都将从文本中转义或剥离。这适用于markdown生成的html输出。
,因为markdown通常生成诸如"p"、"a"、"img"之类的html元素,等。
建议允许不少于
``mdx掼u bleach.whitelist.allowed掼u tags```中的默认标记白名单。
例如:
``python
>;来自mdx掼u bleach.whitelist import allowed掼tags
>;漂白剂=漂白剂延长剂(TAGS=ALLOWED掼TAGS+['small'])
>;>md=markdown.markdown(延长剂=[bleach])
>;>md.convert('<;small>;是允许的<;small>;')
u'<;p>;<;small>;是允许的<;small>;<;p>;'
``
这将允许编写的"小"标记和默认白名单中的任何标记。
请注意,如果安装了可以生成更具体标记的第三方扩展,您可能还需要白名单那些额外的标签。
它可以是一个列表,在
这种情况下,属性允许用于任何标记或字典,其中
键是标记名(或通配符:``*``用于所有标记),值
是允许的属性列表。
默认值是在``mdx_bleach.whitelist.allowed_attributes```中找到的保守字典。
如果重写``attributes``Kwarg并仍然需要若要支持图像和
链接,请确保在标签中允许使用"ref"和"title"属性,
以及``lt;img>;``标记中的``src``、``title``和``alt``属性。
}
bleach=bleaderextension(attributes=attrs)
````
在这种情况下,在任何允许的元素上都允许使用``class``属性(从
``tags``参数中),`````<;a>;``标记都允许有``ref`,``title``和
``rel`属性,等等。
如果callable返回true,则允许该属性。否则,它将被剥离。
例如:
`` python
def filter_src(name,value):
如果name in('alt','title','height',,"width"):
返回true
如果name=='src':
p=urlparse(value)
返回(不是p.netloc)或p.netloc=='mydomain.com'
返回false
`````
允许设置样式
作者,例如"颜色"和"背景色"。
默认值是空列表。
'FONT WEIGHT']
bleach=bleaderextension(tags=tags,attributes=attrs,styles=styles)
````
\protocol whitelist
默认列表只允许http、https和mailto。
例如,这将允许的协议设置为http、https和smb:
`` python
协议=['http','https','smb']
漂白剂=漂白剂扩展(协议=协议)
````
这将smb添加到漂白剂指定的一组允许的协议:
``python
bleach=bleaderextension(protocols=allowed_protocols+['smb'])
````
例如:
``python
>;>md=markdown.markdown(extensions=[bleartextension()])
>;>md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;P>;<;SPAN>;不允许<;SPAN&;gt;'
````
此标记完全可以传递
``strip=true`:
``python
>;>;md=markdown.markdown(extensions=[bleartextension(strip=true))
>;>;md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;p>;不允许<;/p>;'
```
若要禁用此行为,请设置
``strip\u comments=false`:
``python
>;>html='my<;!--评论-->;html'
>;>;md=markdown.markdown(extensions=[bleattextension()])
>;>;md.convert(html)
u'<;p>;my html<;p>;'
>;>;md=markdown.markdown(extensions=[bleattextension(strip\u comments=false])
>;>;md.convert(HTML)
u'<;p>;我的<;!--已评论-->;HTML<;/P>;'
```
**mdx_bleach**是一个[python标记](https://pythonhosted.org/markdown/)
扩展,它基于一个
白名单来清理不受信任的标记文档的输出。扩展是基于[漂白剂](http://bleach.readthedocs.org/en/latest/),
一个健壮的基于白名单的HTML消毒剂。
根据设计,所有HTML标记都允许在降价文档中使用。除非在代码块中写入
,否则原始html不会转义,因此由
web浏览器呈现。虽然这是一个不错的创作功能,但它也暴露了一些xss
漏洞。当标记文档的源
不可信时,这就成为一个问题。
**mdx_bleach**打算为python标记的
[不推荐的安全模式](https://pythonhosted.org/markdown/reference.html安全模式)提供更安全、更灵活的替代方案。
##安装md=markdown.markdown(extensions=[漂白剂])
>;>md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;P>;<;SPAN>;不允许<;SPAN>;<;P>;'
``
,因为默认情况下不允许使用`<;SPAN>;``标记,**mdx_漂白剂**退出。
默认白名单可以在"mdx_漂白剂.白名单"中找到。
将以下关键字参数传递给``blazeextension``:
*``tags``tag whitelist
*``attributes``attributes whitelist
*``styles``styles whitelist
*``protocols`` protocols whitelist
*``strip``剥离标记
*``strip`comments``剥离注释
下面的示例反映了默认配置:
``python
from mdx_bleach.whitelist import allowed_tags,allowed_attributes,allowed_styles,allowed_protocols
bleach=bleadence(tags=allowed_tags,attributes=allowed_attributes,
styles=allowed_styles,protocols=allowed_protocols,strip=false,strip_comments=true)
md=markdown.markdown(extensions=[bleach])
`````
``tags``kwarg是允许的html标记的白名单。它应该是一个列表、
元组或其他iterable。任何其他HTML标记都将从文本中转义或剥离。这适用于markdown生成的html输出。
,因为markdown通常生成诸如"p"、"a"、"img"之类的html元素,等。
建议允许不少于
``mdx掼u bleach.whitelist.allowed掼u tags```中的默认标记白名单。
例如:
``python
>;来自mdx掼u bleach.whitelist import allowed掼tags
>;漂白剂=漂白剂延长剂(TAGS=ALLOWED掼TAGS+['small'])
>;>md=markdown.markdown(延长剂=[bleach])
>;>md.convert('<;small>;是允许的<;small>;')
u'<;p>;<;small>;是允许的<;small>;<;p>;'
``
这将允许编写的"小"标记和默认白名单中的任何标记。
请注意,如果安装了可以生成更具体标记的第三方扩展,您可能还需要白名单那些额外的标签。
它可以是一个列表,在
这种情况下,属性允许用于任何标记或字典,其中
键是标记名(或通配符:``*``用于所有标记),值
是允许的属性列表。
默认值是在``mdx_bleach.whitelist.allowed_attributes```中找到的保守字典。
如果重写``attributes``Kwarg并仍然需要若要支持图像和
链接,请确保在标签中允许使用"ref"和"title"属性,
以及``lt;img>;``标记中的``src``、``title``和``alt``属性。
}
bleach=bleaderextension(attributes=attrs)
````
在这种情况下,在任何允许的元素上都允许使用``class``属性(从
``tags``参数中),`````<;a>;``标记都允许有``ref`,``title``和
``rel`属性,等等。
如果callable返回true,则允许该属性。否则,它将被剥离。
例如:
`` python
def filter_src(name,value):
如果name in('alt','title','height',,"width"):
返回true
如果name=='src':
p=urlparse(value)
返回(不是p.netloc)或p.netloc=='mydomain.com'
返回false
`````
允许设置样式
作者,例如"颜色"和"背景色"。
默认值是空列表。
'FONT WEIGHT']
bleach=bleaderextension(tags=tags,attributes=attrs,styles=styles)
````
\protocol whitelist
默认列表只允许http、https和mailto。
例如,这将允许的协议设置为http、https和smb:
`` python
协议=['http','https','smb']
漂白剂=漂白剂扩展(协议=协议)
````
这将smb添加到漂白剂指定的一组允许的协议:
``python
bleach=bleaderextension(protocols=allowed_protocols+['smb'])
````
例如:
``python
>;>md=markdown.markdown(extensions=[bleartextension()])
>;>md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;P>;<;SPAN>;不允许<;SPAN&;gt;'
````
此标记完全可以传递
``strip=true`:
``python
>;>;md=markdown.markdown(extensions=[bleartextension(strip=true))
>;>;md.convert('<;SPAN>;不允许<;SPAN>;')
u'<;p>;不允许<;/p>;'
```
若要禁用此行为,请设置
``strip\u comments=false`:
``python
>;>html='my<;!--评论-->;html'
>;>;md=markdown.markdown(extensions=[bleattextension()])
>;>;md.convert(html)
u'<;p>;my html<;p>;'
>;>;md=markdown.markdown(extensions=[bleattextension(strip\u comments=false])
>;>;md.convert(HTML)
u'<;p>;我的<;!--已评论-->;HTML<;/P>;'
```