是完全不了解的(这应该不算一个合格的web手了哈哈), 所以在这里简单记录一下吧
解题的过程
import os
from flask import Flask, request, send_from_directory.../的文件名
在flask中, 对于上传文件的文件名获取处理方式和PHP并不相同, PHP中会获取原始文件名中的最后一个文件名, 而falsk中的request.files['file']则是会将原始文件名全部拿到...因为测试后发现这个函数会将/删除, .会被替换为_(连续多个的.会被替换为一个_), 另外例如,,(,),'这些非字母数字下换线的也会被直接删除, 所以不管是sqlite注入还是路径穿越的都不用想了(...注意一点, 这里的flag是不可能在sqlite数据库中的, 因为这个sqlite并没有进行任何的文件读取操作, 而是使用sqlite3.connect(':memory:')的方式将数据库放在缓存中,..., 这个函数可以说就是会对第二个文件名参数(也就是我们的可控的数据)进行绝对路径的获取, 并且取到最后的文件名, 是不存在目录穿越的, 例如
../../../../../..