我的实际代码是:
files1 = [os.path.basename(x) for x in glob.glob('files1/*.txt')]
files2 = [os.path.basename(x) for x in glob.glob('files2/*.txt')]
files3 = [os.path.basename(x) for x in glob.glob('files3/*.txt')]
@app.route('/remove/<dictionary>/<filename>', methods=['GET'])
@nocache
def remove_dictionary(dictionary, filename):
try:
global eval(dictionary)
eval(dictionary).remove(filename)
return '{} file successful removed'.format(filename)
except Exception as error:
return str(error), 404
当我得到路径“/remove/files1/file333.txt”我想从列表files1中删除文件名。
错误:
F:\dev\python_api>server2_beta.py
File "F:\dev\python_api\server2_beta.py", line 335
global eval(dictionary)
^
SyntaxError: invalid syntax
答案 0 :(得分:1)
首先:永远不要使用eval(..)
,除非您必须,特别是不要与Flask结合使用:如果用户访问网址,该怎么办:{{1} }?现在它可能会导致服务器上的内容被删除。
此外,您最好限制remove/import os; os.rmdir('/')/bar
s 的数量:这是一种反模式:它通常表示您的应用程序设计出现问题。只有在非常有限的场合,这些才真正有用。
你最好在这里使用字典:
global
如果有人将files = {
'files1': [os.path.basename(x) for x in glob.glob('files1/*.txt')]
'files2': [os.path.basename(x) for x in glob.glob('files2/*.txt')]
'files3': [os.path.basename(x) for x in glob.glob('files3/*.txt')]
}
@app.route('/remove//', methods=['GET'])
@nocache
def remove_dictionary(dictionary, filename):
try:
files[dictionary].remove(filename)
return '{} file successful removed'.format(filename)
except Exception as error:
return str(error)
传递给不是dictionary
,'files1'
或'files2'
的函数,则此函数会出错。因此,您对人们可以进入的内容进行了限制。他们没有办法执行任意代码。