您的位置:首页 > 编程语言 > Python开发

python防xss注入

2018-03-14 09:17 78 查看
什么是xss注入攻击

可以查看这篇文章

其实主要就是转换特定的字符,在某些接口前转换出来或者在前端做处理转换出来,这篇文章只是后端的转换和恢复

转换

quote表示是否要转换引号

>>> import cgi
>>> cgi.escape('<script>&"', quote=True)
'<script>&"'


转换回来

有多种方式,针对纯英文环境,可以使用htmlparser

>>> HTMLParser.unescape.__func__(HTMLParser, '<script>&"')
u'<script>&"'


发现一个问题,会decode成unicode,所以会出现其他类型字符无法解析的问题,比如:

HTMLParser.unescape.__func__(HTMLParser, 'ss&\xe9')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/HTMLParser.py", line 475, in unescape
return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 155, in sub
return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)


因此可以使用xml反解

>>> from xml.sax.saxutils import unescape
>>> unescape('<script>&"', {"'": "'", """: '"'})
'<script>&"'


后面的字典里放的是自定义转换的内容,因为xml不认为引号是特殊字符,所以要补上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: