安全

安全

【BUG】Flask werkzeug secure_filename中文问题

服务端atool 发表了文章 • 0 个评论 • 1356 次浏览 • 2016-04-27 16:51 • 来自相关话题

使用Flask做web开发的时候,经常用到上传文件,然后Flask官方推荐使用secure_filename方法对上传的文件名进行处理。
结果这个方法对于中文文件处理并不好,导致非常隐晦的BUG。
如下为测试代码:#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2016年3月31日

@author: hustcc
'''
from werkzeug.utils import secure_filename

print secure_filename("My cool movie.mov")
print secure_filename("../../../etc/passwd")
print secure_filename(u'i contain cool \xfcml\xe4uts.txt')

print secure_filename(u'中文文件名.txt')
print secure_filename(u'中文文件名+English13.txt')打印结果如下:




注意第4,5点输出结果。中文直接被删除,导致文件名直接变成后缀,连“.”都没有了。官方的Flask demo也是害人。
建议直接用md5代替这个方法来取得安全性。 查看全部
使用Flask做web开发的时候,经常用到上传文件,然后Flask官方推荐使用secure_filename方法对上传的文件名进行处理。
结果这个方法对于中文文件处理并不好,导致非常隐晦的BUG。
如下为测试代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2016年3月31日

@author: hustcc
'''
from werkzeug.utils import secure_filename

print secure_filename("My cool movie.mov")
print secure_filename("../../../etc/passwd")
print secure_filename(u'i contain cool \xfcml\xe4uts.txt')

print secure_filename(u'中文文件名.txt')
print secure_filename(u'中文文件名+English13.txt')
打印结果如下:
未命名.png

注意第4,5点输出结果。中文直接被删除,导致文件名直接变成后缀,连“.”都没有了。官方的Flask demo也是害人。
建议直接用md5代替这个方法来取得安全性。

【BUG】Flask werkzeug secure_filename中文问题

服务端atool 发表了文章 • 0 个评论 • 1356 次浏览 • 2016-04-27 16:51 • 来自相关话题

使用Flask做web开发的时候,经常用到上传文件,然后Flask官方推荐使用secure_filename方法对上传的文件名进行处理。
结果这个方法对于中文文件处理并不好,导致非常隐晦的BUG。
如下为测试代码:#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2016年3月31日

@author: hustcc
'''
from werkzeug.utils import secure_filename

print secure_filename("My cool movie.mov")
print secure_filename("../../../etc/passwd")
print secure_filename(u'i contain cool \xfcml\xe4uts.txt')

print secure_filename(u'中文文件名.txt')
print secure_filename(u'中文文件名+English13.txt')打印结果如下:




注意第4,5点输出结果。中文直接被删除,导致文件名直接变成后缀,连“.”都没有了。官方的Flask demo也是害人。
建议直接用md5代替这个方法来取得安全性。 查看全部
使用Flask做web开发的时候,经常用到上传文件,然后Flask官方推荐使用secure_filename方法对上传的文件名进行处理。
结果这个方法对于中文文件处理并不好,导致非常隐晦的BUG。
如下为测试代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2016年3月31日

@author: hustcc
'''
from werkzeug.utils import secure_filename

print secure_filename("My cool movie.mov")
print secure_filename("../../../etc/passwd")
print secure_filename(u'i contain cool \xfcml\xe4uts.txt')

print secure_filename(u'中文文件名.txt')
print secure_filename(u'中文文件名+English13.txt')
打印结果如下:
未命名.png

注意第4,5点输出结果。中文直接被删除,导致文件名直接变成后缀,连“.”都没有了。官方的Flask demo也是害人。
建议直接用md5代替这个方法来取得安全性。