昨天晚上平台被个别用户利用了一个漏洞:
原理:https://www.zhihu.com/question/43621727
http://blog.sina.com.cn/s/blog_593d2b950100hwl1.html
在浏览器上执行测试代码:
data:text/html;charset=utf8,<script>document.write('陈佳慧'+String.fromCharCode(8238)+'送了一座海岛'.split('').reverse().join('')+String.fromCharCode(8237))</script>
复制生成的文字,取app上修改昵称。
效果:
虽然说没有影响到业务数据,但是这样的漏洞如上面介绍的那样还是有一些风险的,对于其他用户也有困扰。
写了一个过滤函数。
def nick_name_filter(nick_name):
return nick_name.replace(unichr(8206).encode('utf-8'), '') \
.replace(unichr(8207).encode('utf-8'), '') \
.replace(unichr(8205).encode('utf-8'), '') \
.replace(unichr(8204).encode('utf-8'), '') \
.replace(unichr(8234).encode('utf-8'), '') \
.replace(unichr(8237).encode('utf-8'), '') \
.replace(unichr(8238).encode('utf-8'), '') \
.replace(unichr(8236).encode('utf-8'), '') \
.replace(unichr(8302).encode('utf-8'), '') \
.replace(unichr(8303).encode('utf-8'), '') \
.replace(unichr(8299).encode('utf-8'), '') \
.replace(unichr(8298).encode('utf-8'), '') \
.replace(unichr(8301).encode('utf-8'), '') \
.replace(unichr(8300).encode('utf-8'), '') \
.replace(unichr(30).encode('utf-8'), '') \
.replace(unichr(31).encode('utf-8'), '')