今天在分析nginx日志的时候,发现用户的请求中有如下格式的字符:
\xB6\xF1\xD2\xE2
而大部分用户提交的请求则是如下形式:
%E4%BC%98%E8%A1%A3%E5%BA%93
对于前者,使用以下python代码进行解码:
def decode_query_str():
str = b'\xB6\xF1\xD2\xE2'
print("{} ==》 {}".format(str, str.decode('GBK')))
执行结果:
b'\xb6\xf1\xd2\xe2' ==》 恶意
发生这种情况,可能的原因如下:
IE浏览器设置中有一个选项:”以UTF-8 形式发送URL路径”,当该选项有效时,IE将会对特殊字符进行UTF-8编码,同时进行URL编码。如果该选项无效,则使用默认编码”GBK”,并且不进行 URL编码。但是,对于URL后面的参数,则总是不进行编码,相当于UTF-8选项无效。比如: “中文.html?a=中文”, 当UTF-8选项有效时,将发送链接”%e4%b8%ad%e6%96%87.html?a=/x4e/x2d/x65/x87″; 而UTF-8选项无效时,将发送链接”/x4e/x2d/x65/x87.html?a=/x4e/x2d/x65/x87″。 在此注意,不管此选项是否有勾选,后面的参数都没有改变,改变的仅仅是地址。
对于后者,通过urldecode即可得到解码之后的数据,python代码如下:
def str_two():
str = '恶意'
print(urllib.parse.quote(str))
str = '%E6%81%B6%E6%84%8F'
print(urllib.parse.unquote(str))
Post a comment now »
本文目前不可评论
Sorry, the comment form is closed at this time.
No comments yet.